Fortran无法在865398.78和-865398.78之间进行添加吗?为什么答案是-0.03?

ke *_* xu 1 fortran fortran90

在下面的代码中,我将865398.78和-865398.78加在一起.我希望得到0,但我得到-0.03.

Fortran代码和结果

源代码:

program main
real(8) :: x

open(10,file="test.txt")
read(10,*)x
print *,"x=",x
x=x+865398.78
print *,"x+865398.78=",x
end program
Run Code Online (Sandbox Code Playgroud)

结果:

x=  -865398.780000000     
x+865398.78= -3.000000002793968E-002
Run Code Online (Sandbox Code Playgroud)

我对"读取"代码或其他东西的使用有误吗?

Rau*_*ner 5

数字865398.78在代码中以单精度表示.单精度可以处理大约7位有效数字,而你的数字有8位.你可以通过写入使其达到双精度

x=x+865398.78_8
Run Code Online (Sandbox Code Playgroud)

  • 在这个答案中,`8`是一种类型的参数,通常是指双精度.但是双精度*不是*总是8,并且使用8来定义双精度已经过时了. (3认同)
  • 添加到@Ross,`d0`将是一个更合适的后缀,将数字转换为双精度,即'865398.78d0`. (3认同)