Точность расхождения между Фортраном и Питоном (функция sin)

Я вижу несоответствие между python и Fortran при использовании функции sinus. Может ли кто-нибудь пролить свет на это, пожалуйста?

в питоне:

      import math
      print(math.sin(6.28318530717959))
      >> 3.3077843189710302e-15

в Фортран90:

      print*, sin(6.28318530717959d0)
      >> 3.3077720792452914E-15

РЕДАКТИРОВАТЬ: Поскольку это кажется проблемой компилятора Фортрана, я использовал g95 с

       g95 -O3 test.f90 -o test.exe

1 ответ

Решение

Согласно IEEE 754 для представления с плавающей точкой:

In [7]: bin(3.3077720792452914e-15.view(np.uint64))
Out[7]: '0b11110011101101110010110011010000000000000000000000000000000000'

показывает усеченную мантиссу, когда

In [9]: bin(3.3077843189710302e-15.view(np.uint64))
Out[9]: '0b11110011101101110010110011101100111001100111010111010001111111'

показывает простой.

Вероятно, проблема с типом, с float32 в процессе, даже происхождение загадочно.

Другие вопросы по тегам