Fortran 和 Python(sin 函数)之间的精度差异
Precision discrepancy between Fortran and Python (sin function)
我发现 python 和 Fortran 在使用 sinus 函数时存在差异。任何人都可以阐明这一点吗?
在python中:
import math
print(math.sin(6.28318530717959))
>> 3.3077843189710302e-15
在 fortran90 中:
print*, sin(6.28318530717959d0)
>> 3.3077720792452914E-15
编辑:
因为这似乎是 Fortran 编译器问题,所以我将 g95 与
一起使用
g95 -O3 test.f90 -o test.exe
根据 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,连来源都成谜了。
我发现 python 和 Fortran 在使用 sinus 函数时存在差异。任何人都可以阐明这一点吗?
在python中:
import math
print(math.sin(6.28318530717959))
>> 3.3077843189710302e-15
在 fortran90 中:
print*, sin(6.28318530717959d0)
>> 3.3077720792452914E-15
编辑: 因为这似乎是 Fortran 编译器问题,所以我将 g95 与
一起使用 g95 -O3 test.f90 -o test.exe
根据 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,连来源都成谜了。