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