- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
My testing has identified a number of argument values for several of the transcendental function FPU instructions for which the result is not rounded correctly for all rounding types. In particular, Round Up and Round Down should produce different outputs for inexact results (they should differ by 1 lsb in the significands), this does not always happen.
Correct behavior is observed for the vast majority of argument values. For the problematical argument values: some produce incorrect results on Intel processors and correct results on AMD processors, some produce correct results on Intel processors and incorrect results on AMD processors, and some produce incorrect results on both Intel and AMD processors. The following table summarizes the failures observed:
Number of failures for 10,000 different argument values for each instruction
(Failure is when Round Up and Round Down return the same inexact result)
Instruction Stack Intel AMD
FYL2X ST(0) = Arg, ST(1) = 1 1256 633
F2XM1 ST(0) = Arg 24 0
FSIN ST(0) = Arg 30 58
FCOS ST(0) = Arg 23 50
FATAN ST(0) = 1, ST(1) = Arg 85 53
The tests were conducted on the following Intel processors:
Mobile Pentium 3
Pentium 4
i7-2600
Celeron-J3455
i7-10700
Each produced identical results as shown in table
The tests were conducted on the following AMD processor
Ryzen 7-5700U
I've written a program which demonstrates the problem using some sample argument values.
When run on an Intel processor the following output is generated:
Control Words:
Down = 0x077F
Up = 0x0B7F
To Zero = 0x0F7F
fyl2x
Arg = 0x4003:0x9C1234567890ABCD
Down = 0x4001:0x892766B03448B1B9, Status = 0x3820
Up = 0x4001:0x892766B03448B1BA, Status = 0x3A20
To Zero = 0x4001:0x892766B03448B1B9, Status = 0x3820
PASS
Arg = 0x4003:0x9F0A771C970F7B81
Down = 0x4001:0x8A062CE7CEA497C3, Status = 0x3820
Up = 0x4001:0x8A062CE7CEA497C3, Status = 0x3820
To Zero = 0x4001:0x8A062CE7CEA497C3, Status = 0x3820
FAIL - Round Down and Round Up produce same result
Arg = 0x4003:0x9EB8F47304039AA3
Down = 0x4001:0x89EE7DADB11D0996, Status = 0x3820
Up = 0x4001:0x89EE7DADB11D0997, Status = 0x3A20
To Zero = 0x4001:0x89EE7DADB11D0996, Status = 0x3820
PASS
Arg = 0x4003:0x9DC46C764ADFF809
Down = 0x4001:0x89A726C00F0D191F, Status = 0x3820
Up = 0x4001:0x89A726C00F0D191F, Status = 0x3820
To Zero = 0x4001:0x89A726C00F0D191F, Status = 0x3820
FAIL - Round Down and Round Up produce same result
f2xm1
Arg = 0xBFFC:0xEBB8B8A2E019FB00
Down = 0xBFFC:0x97055F8DD5769B8D, Status = 0x3A20
Up = 0xBFFC:0x97055F8DD5769B8C, Status = 0x3820
To Zero = 0xBFFC:0x97055F8DD5769B8C, Status = 0x3820
PASS
Arg = 0x3FFC:0xDB9E060FE4792C40
Down = 0x3FFC:0xA41FCECD7E74E5A0, Status = 0x3820
Up = 0x3FFC:0xA41FCECD7E74E5A0, Status = 0x3820
To Zero = 0x3FFC:0xA41FCECD7E74E5A0, Status = 0x3820
FAIL - Round Down and Round Up produce same result
fsin
Arg = 0x3FFF:0xBC1234567890ABCD
Down = 0x3FFE:0xFEAEC451FF9CF856, Status = 0x3820
Up = 0x3FFE:0xFEAEC451FF9CF857, Status = 0x3A20
To Zero = 0x3FFE:0xFEAEC451FF9CF856, Status = 0x3820
PASS
Arg = 0x3FFF:0xDEA9E6EEB7025FFA
Down = 0x3FFE:0xFC5CF1156305E69E, Status = 0x3820
Up = 0x3FFE:0xFC5CF1156305E69E, Status = 0x3820
To Zero = 0x3FFE:0xFC5CF1156305E69E, Status = 0x3820
FAIL - Round Down and Round Up produce same result
Arg = 0x3FFE:0xCA915379FA97E0E3
Down = 0x3FFE:0xB614B77BCB4BBFF3, Status = 0x3820
Up = 0x3FFE:0xB614B77BCB4BBFF4, Status = 0x3A20
To Zero = 0x3FFE:0xB614B77BCB4BBFF3, Status = 0x3820
PASS
Arg = 0xBFFE:0xF17939A7C17A80B2
Down = 0xBFFE:0xCF39B2EE8F137E95, Status = 0x3820
Up = 0xBFFE:0xCF39B2EE8F137E95, Status = 0x3820
To Zero = 0xBFFE:0xCF39B2EE8F137E95, Status = 0x3820
FAIL - Round Down and Round Up produce same result
fcos
Arg = 0xC000:0xA01234567890ABCD
Down = 0xBFFE:0xCD434B83E67B8522, Status = 0x3A20
Up = 0xBFFE:0xCD434B83E67B8521, Status = 0x3820
To Zero = 0xBFFE:0xCD434B83E67B8521, Status = 0x3820
PASS
Arg = 0xC000:0xA192641B328B6D8B
Down = 0xBFFE:0xD0CB18A7001DC65D, Status = 0x3820
Up = 0xBFFE:0xD0CB18A7001DC65D, Status = 0x3820
To Zero = 0xBFFE:0xD0CB18A7001DC65D, Status = 0x3820
FAIL - Round Down and Round Up produce same result
Arg = 0xC000:0x9EC226809D495187
Down = 0xBFFE:0xCA1504F3BDE53698, Status = 0x3A20
Up = 0xBFFE:0xCA1504F3BDE53697, Status = 0x3820
To Zero = 0xBFFE:0xCA1504F3BDE53697, Status = 0x3820
PASS
Arg = 0xBFFE:0xA14013EC460ED058
Down = 0x3FFE:0xCEDF5E8495E28B19, Status = 0x3820
Up = 0x3FFE:0xCEDF5E8495E28B19, Status = 0x3820
To Zero = 0x3FFE:0xCEDF5E8495E28B19, Status = 0x3820
FAIL - Round Down and Round Up produce same result
fpatan
Arg = 0xC002:0x991234567890ABCD
Down = 0xBFFF:0xBBBB1EB593B5337B, Status = 0x3A20
Up = 0xBFFF:0xBBBB1EB593B5337A, Status = 0x3820
To Zero = 0xBFFF:0xBBBB1EB593B5337A, Status = 0x3820
PASS
Arg = 0xC002:0x955566CF41F21379
Down = 0xBFFF:0xBB665880AA3CA06C, Status = 0x3820
Up = 0xBFFF:0xBB665880AA3CA06C, Status = 0x3820
To Zero = 0xBFFF:0xBB665880AA3CA06C, Status = 0x3820
FAIL - Round Down and Round Up produce same result
Arg = 0xC002:0x9C6F156191148DE0
Down = 0xBFFF:0xBC03F847761E49B8, Status = 0x3A20
Up = 0xBFFF:0xBC03F847761E49B7, Status = 0x3820
To Zero = 0xBFFF:0xBC03F847761E49B7, Status = 0x3820
PASS
Arg = 0xC002:0x9FE78C0053E2D616
Down = 0xBFFF:0xBC4BF93E318E5B14, Status = 0x3820
Up = 0xBFFF:0xBC4BF93E318E5B14, Status = 0x3820
To Zero = 0xBFFF:0xBC4BF93E318E5B14, Status = 0x3820
FAIL - Round Down and Round Up produce same result
When run on an AMD processor the following output is generated:
Control Words:
Down = 0x077F
Up = 0x0B7F
To Zero = 0x0F7F
fyl2x
Arg = 0x4003:0x9C1234567890ABCD
Down = 0x4001:0x892766B03448B1B9, Status = 0x3820
Up = 0x4001:0x892766B03448B1BA, Status = 0x3A20
To Zero = 0x4001:0x892766B03448B1B9, Status = 0x3820
PASS
Arg = 0x4003:0x9F0A771C970F7B81
Down = 0x4001:0x8A062CE7CEA497C3, Status = 0x3820
Up = 0x4001:0x8A062CE7CEA497C4, Status = 0x3A20
To Zero = 0x4001:0x8A062CE7CEA497C3, Status = 0x3820
PASS
Arg = 0x4003:0x9EB8F47304039AA3
Down = 0x4001:0x89EE7DADB11D0997, Status = 0x3820
Up = 0x4001:0x89EE7DADB11D0997, Status = 0x3820
To Zero = 0x4001:0x89EE7DADB11D0997, Status = 0x3820
FAIL - Round Down and Round Up produce same result
Arg = 0x4003:0x9DC46C764ADFF809
Down = 0x4001:0x89A726C00F0D191F, Status = 0x3820
Up = 0x4001:0x89A726C00F0D191F, Status = 0x3820
To Zero = 0x4001:0x89A726C00F0D191F, Status = 0x3820
FAIL - Round Down and Round Up produce same result
f2xm1
Arg = 0xBFFC:0xEBB8B8A2E019FB00
Down = 0xBFFC:0x97055F8DD5769B8D, Status = 0x3A20
Up = 0xBFFC:0x97055F8DD5769B8C, Status = 0x3820
To Zero = 0xBFFC:0x97055F8DD5769B8C, Status = 0x3820
PASS
Arg = 0x3FFC:0xDB9E060FE4792C40
Down = 0x3FFC:0xA41FCECD7E74E5A0, Status = 0x3820
Up = 0x3FFC:0xA41FCECD7E74E5A1, Status = 0x3A20
To Zero = 0x3FFC:0xA41FCECD7E74E5A0, Status = 0x3820
PASS
fsin
Arg = 0x3FFF:0xBC1234567890ABCD
Down = 0x3FFE:0xFEAEC451FF9CF856, Status = 0x3820
Up = 0x3FFE:0xFEAEC451FF9CF857, Status = 0x3A20
To Zero = 0x3FFE:0xFEAEC451FF9CF856, Status = 0x3820
PASS
Arg = 0x3FFF:0xDEA9E6EEB7025FFA
Down = 0x3FFE:0xFC5CF1156305E69E, Status = 0x3820
Up = 0x3FFE:0xFC5CF1156305E69F, Status = 0x3A20
To Zero = 0x3FFE:0xFC5CF1156305E69E, Status = 0x3820
PASS
Arg = 0x3FFE:0xCA915379FA97E0E3
Down = 0x3FFE:0xB614B77BCB4BBFF3, Status = 0x3820
Up = 0x3FFE:0xB614B77BCB4BBFF3, Status = 0x3820
To Zero = 0x3FFE:0xB614B77BCB4BBFF3, Status = 0x3820
FAIL - Round Down and Round Up produce same result
Arg = 0xBFFE:0xF17939A7C17A80B2
Down = 0xBFFE:0xCF39B2EE8F137E95, Status = 0x3820
Up = 0xBFFE:0xCF39B2EE8F137E95, Status = 0x3820
To Zero = 0xBFFE:0xCF39B2EE8F137E95, Status = 0x3820
FAIL - Round Down and Round Up produce same result
fcos
Arg = 0xC000:0xA01234567890ABCD
Down = 0xBFFE:0xCD434B83E67B8522, Status = 0x3A20
Up = 0xBFFE:0xCD434B83E67B8521, Status = 0x3820
To Zero = 0xBFFE:0xCD434B83E67B8521, Status = 0x3820
PASS
Arg = 0xC000:0xA192641B328B6D8B
Down = 0xBFFE:0xD0CB18A7001DC65D, Status = 0x3A20
Up = 0xBFFE:0xD0CB18A7001DC65C, Status = 0x3820
To Zero = 0xBFFE:0xD0CB18A7001DC65C, Status = 0x3820
PASS
Arg = 0xC000:0x9EC226809D495187
Down = 0xBFFE:0xCA1504F3BDE53697, Status = 0x3820
Up = 0xBFFE:0xCA1504F3BDE53697, Status = 0x3820
To Zero = 0xBFFE:0xCA1504F3BDE53697, Status = 0x3820
FAIL - Round Down and Round Up produce same result
Arg = 0xBFFE:0xA14013EC460ED058
Down = 0x3FFE:0xCEDF5E8495E28B19, Status = 0x3820
Up = 0x3FFE:0xCEDF5E8495E28B19, Status = 0x3820
To Zero = 0x3FFE:0xCEDF5E8495E28B19, Status = 0x3820
FAIL - Round Down and Round Up produce same result
fpatan
Arg = 0xC002:0x991234567890ABCD
Down = 0xBFFF:0xBBBB1EB593B5337B, Status = 0x3A20
Up = 0xBFFF:0xBBBB1EB593B5337A, Status = 0x3820
To Zero = 0xBFFF:0xBBBB1EB593B5337A, Status = 0x3820
PASS
Arg = 0xC002:0x955566CF41F21379
Down = 0xBFFF:0xBB665880AA3CA06D, Status = 0x3A20
Up = 0xBFFF:0xBB665880AA3CA06C, Status = 0x3820
To Zero = 0xBFFF:0xBB665880AA3CA06C, Status = 0x3820
PASS
Arg = 0xC002:0x9C6F156191148DE0
Down = 0xBFFF:0xBC03F847761E49B7, Status = 0x3820
Up = 0xBFFF:0xBC03F847761E49B7, Status = 0x3820
To Zero = 0xBFFF:0xBC03F847761E49B7, Status = 0x3820
FAIL - Round Down and Round Up produce same result
Arg = 0xC002:0x9FE78C0053E2D616
Down = 0xBFFF:0xBC4BF93E318E5B14, Status = 0x3820
Up = 0xBFFF:0xBC4BF93E318E5B14, Status = 0x3820
To Zero = 0xBFFF:0xBC4BF93E318E5B14, Status = 0x3820
FAIL - Round Down and Round Up produce same result
I can provide the source code for this program if requested.
Although this may be considered to be a very minor issue, it is causing me a problem.
I have not been able to find any references to this behavior. Is it a known problem?
I have been investigating this issue for some time, so can provide a lot of additional information if requested.
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello, @Rod_Ferrari
Thank you for posting on the Intel® communities. I will do my best to assist you here.
Due to these products being discontinued, Intel Customer Service no longer supports inquiries for them. You may also find the Discontinued Products website, helping to address your request.
You can get the specifications and verify this product's discontinuance status at the Intel® Product Specifications website > Marketing Status > "Discontinued": Intel® Core™ i7-2600 Processor, Mobile Intel® Pentium® III Processor, and Mobile Intel® Pentium® 4 Processor.
Regarding the other processors, can you please clarify what you are trying to do with the processors?
Are you trying to run a program or a programming language? If so, please specify the name.
Best regards,
Jocelyn M.
Intel Customer Support Technician.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The only reason I identified the older processors was to provide you with the information that this is not a problem that was introduced in later processors, but is a long-standing issue.
I am developing software which accesses the FPU using assembler level code; it was during testing of this software that the problem was identified.
I have provided enough information for you to reproduce the problem in the hope that you will investigate further and provide an explanation of the observed behavior.
Thank you
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello, @johnaaronrose.
Thank you for your reply.
In this case, you need to visit the Intel Developer Zone, where you can get the assistance you need regarding your inquiries and more.
This thread will no longer be monitored as this is out of our scope. Thank you for your understanding.
Best regards,
Jocelyn M.
Intel Customer Support Technician.
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page