Precision discrepancy between Fortran and Python (sin function)

旧巷老猫 提交于 2019-12-11 06:15:15

问题


I see a discrepancy between python and Fortran when using the sinus function. Could anyone shed light on this, please?

in python:

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

in fortran90:

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

EDIT: As it seems to be a Fortran compiler issue, I used g95 with

       g95 -O3 test.f90 -o test.exe

回答1:


According to IEEE 754 for float representation:

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

shows a truncated mantissa, when

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

shows a plain one.

Probably a type issue, with a float32 in the process, even the origin is mysterious.



来源:https://stackoverflow.com/questions/42462344/precision-discrepancy-between-fortran-and-python-sin-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!