
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
解决方案
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.
本文探讨了在Python和Fortran中使用正弦函数时出现的细微数值差异。通过对比两种语言中sin(6.28318530717959)的结果,发现其主要由浮点数表示方式的不同引起。进一步通过IEEE 754标准分析了这两种结果的二进制表示,揭示了差异背后的原理。
2015

被折叠的 条评论
为什么被折叠?



