这种行为引起了我的注意:
PROGRAM Sine
USE, INTRINSIC :: ISO_Fortran_env, dp=>REAL64 !modern DOUBLE PRECISION
IMPLICIT NONE
REAL(dp), PARAMETER :: PI = 3.1415926535897931 !PRINT *, ACOS(-1.0D+00)
PRINT *, SIN(PI / 4.0_dp)
PRINT *, COS(PI / 4.0_dp)
PRINT *, SQRT(2.0_dp) / 2.0_dp
END PROGRAM Sine
未格式化的输出分别提供 0.7071067 9664085752, 0.7071067 6573223719和 0.7071067 8118654757。我不明白为什么这不同意双精度:SQRT(2.0D+00) / 2.0D+00
是准确的,而SIN(PI / 4.0D+00)
和COS(PI / 4.0D+00)
应该来自泰勒系列的那些函数。我可以通过袖珍计算器得到更好的协议,所以显然我做错了。用DSIN
,DCOS
和DSQRT
替换上述内在函数会产生相同的结果 - 尽管我不希望有任何不同。有谁知道为什么会这样?