Fortran从文本文件中读取Float - 奇怪的行为

时间:2017-01-19 20:30:10

标签: io floating-point fortran gfortran

有人可以解释一下Fortran如何读取数据,尤其是文本文件。我以为我理解了I / O的行为和格式化选项,但下面的例子让我感到困惑。

我正在尝试从文本文件Domain.txt中读取三个值,其中包含如下所示的三行

221 
500.0200 
500.0000

然后我的程序会读取此文件

program main
implicit none
integer :: N
real    :: xmax,xmin

open(unit=1,file='Domain.txt')

read(1,*) N      ! Read first  line
read(1,*) xmax   ! Read second line
read(1,*) xmin   ! Read third  line

print*, N
print*, xmax
print*, xmin
end program

该计划的结果是

      221
500.019989
500.000000

所以我的混淆是xmax变量的第二个输出。为什么它会在第二行读取500.019989而不是500.0200

我尝试在read语句中使用fortran格式format(fm.d)来说明只读小数点后的前两位数,但我无法解决问题。

我正在使用gfortran 4.8.5。任何帮助,将不胜感激。我也知道这与这里提出的问题有些重复(Reading REAL's from file in FORTRAN 77 - odd results),但我没有足够的声誉来评论和提出有关解决方案的问题。

1 个答案:

答案 0 :(得分:1)

数字2/100(这是500.02的小数部分) 二进制中没有有限的表示。它有 无限周期表示 0.0000001010001111010111000010100011110101110000101 ... 因此,该值将被截断或舍入以适应 浮点数的表示模型并且如此出现 在阅读期间。 这就是所有语言(包括Fortran,C,C ++,Java ......) 用浮点数的二进制表示反应。

相关问题