小编Dan*_*Bar的帖子

在 fortran 中将 Double 转换为 Real 时出现舍入错误

我正在尝试将双精度数转换为实数以进行某些操作,但我注意到一个错误。我有一个用于读取目的的宏,一个short是 4 个字节,一个long是 8 个字节。

这是执行代码:

print*, x, real(x, kind=short) 
print*, x*2.0, real(x*2.0, kind=short) 

print*, real( real(x, kind=short), kind=long) 
print*, real( real(x*2.0, kind=short), kind=long)
Run Code Online (Sandbox Code Playgroud)

这打印出:

173.43304556187957 173.433044 
346.86609112375913 346.866089

173.43304443359375 
346.86608886718750 
Run Code Online (Sandbox Code Playgroud)

那么首先为什么我在转换为实数后还有任何值然后又返回?难道不应该是这样的吗173.43304400000000?为什么当我转换它们时我的价值观会发生变化?我怎样才能改变这一点?

有关信息,fortran 2003,用 gfortran 编译,但我认为 ifort 也有同样的问题。

谢谢你!

floating-point fortran rounding-error rounding type-conversion

0
推荐指数
1
解决办法
232
查看次数