Fortran Coder

标题: 在用数值中的元素作运算时-1.084202172485504E-019不是零 [打印本页]

作者: Proteus    时间: 2021-4-28 20:24
标题: 在用数值中的元素作运算时-1.084202172485504E-019不是零
运算的代码如下:
[Fortran] 纯文本查看 复制代码
integer, parameter::dp=selected_real_kind(p=15,r=307)
real(kind=dp) ye(4),ze(4)
real(kind=dp) a
ye=(/-0.03_dp,-0.03_dp,-0.03_dp,-0.0265_dp/)
ze=(/-0.03_dp,-0.03_dp,-0.03_dp,-0.0265_dp/)
a=ye(3)*ze(2)+ye(2)*ze(4)+ye(4)*ze(3)-ye(3)*ze(4)-ye(2)*ze(3)-ye(4)*ze(2)b=ye(1)*ze(4)+ye(4)*ze(2)+ye(2)*ze(1)-ye(1)*ze(2)-ye(4)*ze(1)-ye(2)*ze(4)


得出的结果是:
a=-1.084202172485504E-019
b=0.000000000000000E+000


为什么不都是0呢?




作者: li913    时间: 2021-4-28 20:59
实数有误差。
作者: Proteus    时间: 2021-4-28 21:15
li913 发表于 2021-4-28 20:59
实数有误差。

那这个误差会影响后面的计算吗?
作者: 风平老涡    时间: 2021-4-28 23:46
本帖最后由 风平老涡 于 2021-4-28 23:55 编辑
Proteus 发表于 2021-4-28 21:15
那这个误差会影响后面的计算吗?

会的。ye, ze和a都是12位的精度,大于12位精度的数字都是无效数。所以a等同于0。要特别注意相同大小的数值相减, 很可能会掉精度。

作者: necrohan    时间: 2021-4-29 07:59
实数不要做=0的比较




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2