从文件读取的值在Fortran中存储为不同的值

时间:2010-09-24 16:04:06

标签: fortran fortran90

我有一个输入文件,第一行包含以下小数。

0.5053102074297753

我有一个Fortran 90程序,它读取文件并输出值。

read(*,*) answer
write(*,"(F20.16)") answer

这是输出:

0.5053101778030396

显然,存储的内容与读取的内容不同。问题是,为什么?

2 个答案:

答案 0 :(得分:2)

如何回答声明?如果它是单精度实数,则只能得到大约6位十进制数字。

此外,将值转换为二进制以进行内部存储和计算。这可能会导致舍入和其他问题,但这里的差异太大,无法成为原因。

要将答案声明为双精度,请使用以下命令:

integer, parameter :: DRK = selected_real_kind (14)
real (kind=DRK) :: answer

这将保证答案至少有14位小数。 “DRK”可以在整个程序中使用。根据您的编译器,您可以尝试询问更多数字......它可能提供这样的类型。很少需要超过双精度。

答案 1 :(得分:2)

What Every Computer Scientist Should Know About Floating-Point Arithmetic

默认的实际精度不足以存储小数部分中包含16位小数的数字。