Fortran一个小程序的行为

时间:2013-05-20 01:50:23

标签: fortran90 gfortran

我是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? 对不起,如果这是一个愚蠢的问题,但我只是不明白我做错了什么......

谢谢!

1 个答案:

答案 0 :(得分:1)

你的程序绝对没有问题。问题与real无法精确表示小数而没有错误有关。问题是不能由2的负幂组成的数字必须大致表示。这就是为什么第16个小数位有一个小错误的原因。有关real s take a look at the article on wikipedia的表示的详细信息。这是another great article on the same subject

如果您将0.2替换为0.25,问题就会消失,因为0.252 ^ -2