Я нашел программу, расположенную по адресу http://notabs.org/fpuaccuracy/ ( прямая ссылка для скачивания ; GPLv3), предназначенную для проверки точности инструкций x87 trigonometri c. Эталонный выход для fpuaccuracy examples
, поставляемый с программой, сгенерированный с помощью Intel Core i7-2600 ( Sandy Bridge ), выглядит следующим образом:
sin with smallest failing argument
argument 4000 C10A 7DC0 DC46 D753 (decimal 3.0162653335001840718)
actual 3FFB FFFF BBF1 3588 24AF (decimal 0.1249994929300478145)
x87 fpu 3FFB FFFF BBF1 3588 24AE (decimal 0.12499949293004781449)
error -1.0002171407788819287 ulp
sin near pi
argument 4000 C90F DAA2 2168 C235 (decimal 3.1415926535897932385)
actual BFBE ECE6 75D1 FC8F 8CBB (decimal -5.0165576126683320235E-20)
x87 fpu BFBF 8000 0000 0000 0000 (decimal -5.42101086242752217E-20)
error -1376283091369227076.6 ulp
sin with large argument
argument 403D FFFF FFFF 2D2A 9042 (decimal 9223372035086174241)
actual BFDF E730 CF55 1180 63F3 (decimal -4.2053336735954077951E-10)
x87 fpu BFF8 C28B 4641 7452 B463 (decimal -0.011874025925697012908)
error -4.7037861121081250351E+26 ulp
cos with smallest failing argument
argument 3FFF C10E 8AC0 BFEB 5E80 (decimal 1.5082562867317745453)
actual 3FFA FFFF 3EA3 D2D7 355B (decimal 0.062499279677629184442)
x87 fpu 3FFA FFFF 3EA3 D2D7 355A (decimal 0.062499279677629184438)
error -1.005468872258621479 ulp
cos near pi/2
argument 3FFF C90F DAA2 2168 C235 (decimal 1.5707963267948966193)
actual BFBD ECE6 75D1 FC8F 8CBB (decimal -2.5082788063341660117E-20)
x87 fpu BFBE 8000 0000 0000 0000 (decimal -2.710505431213761085E-20)
error -1376283091369227076.6 ulp
cos with large argument
argument 403D FFFF FFFF 6CE1 B432 (decimal 9223372035620657689)
actual 3FDD DFD2 E369 AE25 7E4A (decimal 1.0178327217734091432E-10)
x87 fpu BFF8 C28B 45B2 1490 D117 (decimal -0.011874025404105249357)
error -1.8815144449581111989E+27 ulp
tan with smallest failing argument
argument 3FFF B8B5 07B4 294A BD53 (decimal 1.4430245999997931928)
actual 4001 F915 0EE5 BAC8 446C (decimal 7.7838205801874740721)
x87 fpu 4001 F915 0EE5 BAC8 446D (decimal 7.7838205801874740726)
error 1.0017725812707024772 ulp
tan near pi/2
argument 3FFF C90F DAA2 2168 C235 (decimal 1.5707963267948966193)
actual C040 8A51 E04D AABD A35F (decimal -39867976298117107068)
x87 fpu C040 8000 0000 0000 0000 (decimal -36893488147419103232)
error 743622037674500958.81 ulp
tan with large argument
argument 403D FFFF FFFF DCF6 FE38 (decimal 9223372036560879388)
actual 4005 A86C 499C 14EA BD4A (decimal 84.211499097398127292)
x87 fpu 401F C10C D618 50D5 E957 (decimal 6477687856.6315280604)
error 9.3353319161898434351E+26 ulp
При работе на ноутбуке с AMD Ryzen 7 2700U ( Zen ), я получаю следующее:
sin with smallest failing argument
argument 4000 C10A 7DC0 DC46 D753 (decimal 3.0162653335001840718)
actual 3FFB FFFF BBF1 3588 24AF (decimal 0.1249994929300478145)
x87 fpu 3FFB FFFF BBF1 3588 24AE (decimal 0.12499949293004781449)
error -1.0002171407788819287 ulp
sin near pi
argument 4000 C90F DAA2 2168 C235 (decimal 3.1415926535897932385)
actual BFBE ECE6 75D1 FC8F 8CBB (decimal -5.0165576126683320235E-20)
x87 fpu BFBF 8000 0000 0000 0000 (decimal -5.42101086242752217E-20)
error -1376283091369227076.6 ulp
sin with large argument
argument 403D FFFF FFFF 2D2A 9042 (decimal 9223372035086174241)
actual BFDF E730 CF55 1180 63F3 (decimal -4.2053336735954077951E-10)
x87 fpu BFF8 C28B 4641 7452 B463 (decimal -0.011874025925697012908)
error -4.7037861121081250351E+26 ulp
cos with smallest failing argument
argument 3FFF C10E 8AC0 BFEB 5E80 (decimal 1.5082562867317745453)
actual 3FFA FFFF 3EA3 D2D7 355B (decimal 0.062499279677629184442)
x87 fpu 3FFA FFFF 3EA3 D2D7 355A (decimal 0.062499279677629184438)
error -1.005468872258621479 ulp
cos near pi/2
argument 3FFF C90F DAA2 2168 C235 (decimal 1.5707963267948966193)
actual BFBD ECE6 75D1 FC8F 8CBB (decimal -2.5082788063341660117E-20)
x87 fpu BFBE 8000 0000 0000 0000 (decimal -2.710505431213761085E-20)
error -1376283091369227076.6 ulp
cos with large argument
argument 403D FFFF FFFF 6CE1 B432 (decimal 9223372035620657689)
actual 3FDD DFD2 E369 AE25 7E4A (decimal 1.0178327217734091432E-10)
x87 fpu BFF8 C28B 45B2 1490 D117 (decimal -0.011874025404105249357)
error -1.8815144449581111989E+27 ulp
tan with smallest failing argument
argument 3FFF B8B5 07B4 294A BD53 (decimal 1.4430245999997931928)
actual 4001 F915 0EE5 BAC8 446C (decimal 7.7838205801874740721)
x87 fpu 4001 F915 0EE5 BAC8 446C (decimal 7.7838205801874740721)
error 0.0017725812707024772387 ulp
tan near pi/2
argument 3FFF C90F DAA2 2168 C235 (decimal 1.5707963267948966193)
actual C040 8A51 E04D AABD A35F (decimal -39867976298117107068)
x87 fpu C040 8000 0000 0000 0000 (decimal -36893488147419103232)
error 743622037674500958.81 ulp
tan with large argument
argument 403D FFFF FFFF DCF6 FE38 (decimal 9223372036560879388)
actual 4005 A86C 499C 14EA BD4A (decimal 84.211499097398127292)
x87 fpu 401F C10C D618 50D5 E957 (decimal 6477687856.6315280604)
error 9.3353319161898434351E+26 ulp
С одним исключением (tan с наименьшим ошибочным аргументом) результаты идентичны. Я также проверил на своем Ryzen 9 3950X ( Zen 2 ) и получил те же результаты.
В заключение, последние процессоры AMD, включая Zen и Архитектуры Zen 2 , использующие 66-битное приближение числа pi и производящие те же самые неточности, которые современные процессоры Intel дают для тригонометрии x87 c инструкции при заданных определенных аргументах.