0

我是 fortran90 的新手(30 分钟前......),我有这个程序:

program example1
    implicit none
    real (kind=8) :: x,y,z
    x = 3.d0
    y = 2.d-1
    z = x + y 
    print *, "y = ", y
    print *, "x = ", x
    print *, "z = ", z 
end program example1

但是当我运行它时:

gfortran example1.f90
./a.out

输出是:

y =   0.20000000000000001     
x =    3.0000000000000000     
z =    3.2000000000000002   

为什么不是 3.2000000000000000 ???我做错了什么?为什么y的最后一位是1??为什么z的最后一位数字是2??对不起,如果这是一个愚蠢的问题,但我只是不明白我做错了什么......

谢谢!!

4

1 回答 1

1

你的程序绝对没有问题。这个问题与real' 无法准确地表示小数有关,没有错误。问题是不是由负幂组成的数字2必须近似表示。这就是为什么在小数点后 16 位有一个小错误。有关reals表示的更多信息,请查看 wikipedia 上的文章。这是关于同一主题的另一篇很棒的文章

如果替换0.20.25,问题就会消失,因为0.252 ^ -2

于 2013-05-20T01:58:52.497 回答