使用三角函数简单检查双精度协议

时间:2017-07-26 13:15:49

标签: fortran

这种行为引起了我的注意:

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)应该来自泰勒系列的那些函数。我可以通过袖珍计算器得到更好的协议,所以显然我做错了。用DSINDCOSDSQRT替换上述内在函数会产生相同的结果 - 尽管我不希望有任何不同。有谁知道为什么会这样?

0 个答案:

没有答案