Fortran 中用于三角函数的双精度 [重复]

Double precision in Fortran for trignometric functions [duplicate]

提问人:ZeroTwo 提问时间:8/27/2021 最后编辑:RobZeroTwo 更新时间:9/1/2021 访问量:327

问:

我正在使用以下代码来计算 in 中的 。cospi/2Fortran

program precision_Fortran
  IMPLICIT  NONE
  !!integer, parameter :: dp = kind(1.0d0) !!Gives same result as line below
  integer, parameter :: dp = selected_real_kind(15, 307)
  
  Real(dp), parameter:: pi=4.0*atan(1.0)
  Real(dp) :: angle

  angle = cos(pi/2.0)
  
  write(*,*)'pi = ', pi
  write(*,*)'angle = ', angle
     
end program precision_Fortran

我使用 和 编译。两者的输出为gfortranftn95

 pi =    3.1415927410125732
 angle =   -4.3711390001862412E-008

如何获得更好的精度?例如,在我看到它按 的顺序,对于所有使用 .angleC++E-18double

如果需要更多信息来更好地解释它,请告诉我。

额外 :我使用的主要代码,物理方程具有三角项,存在精度问题,我不完全确定,但我怀疑这是因为这个。因此,想检查是否可以以某种方式改进上述内容。不是专家,所以很难弄清楚这一点。Fortran

Fortran Precision Gfortran Fortran95 银霜-Fortran

评论

1赞 francescalus 8/27/2021
在右侧的所有内容中,默认为实数,因此不会像以双精度完成那样精确。pi=4.0*atan(1.0)
1赞 francescalus 8/27/2021
您不需要 instead of because 是双精度,因此作为计算的一部分,将转换为双精度。不过,这并没有什么坏处。cos(pi/2.0_dp)cos(pi/2)pi2
2赞 francescalus 8/27/2021
当然没有必要删除这个问题,这是你的选择。但是,请注意,这个问题确实被问了很多,因此可能会有一些反对票的风险。
1赞 ZeroTwo 8/27/2021
谢谢你清理它...我只是尝试在cos中没有_dp,它工作正常。我迅速更改了主代码中的圆周率,它现在可以工作了!我已经在这个问题上呆了好几个星期了,确实浏览了许多重复的帖子,但错过了这个重要的点,无法_dp内论据。我会保持这个问题不被删除,如果他们像我在之前的帖子中一样错过了它,可能仍然会帮助某人。非常感谢您的所有意见。
1赞 Fausto Arinos Barbuto 8/30/2021
@ZeroTwo、使用Real(dp), parameter:: pi=4.0d0*atan(1.0d0)

答: 暂无答案