首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fortran从文本文件中读取浮点--奇数行为

问Fortran从文本文件中读取浮点--奇数行为
EN

Stack Overflow用户
提问于 2017-01-19 20:30:09
回答 1查看 1.5K关注 0票数 0

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

我试图从文本文件Domain.txt中读取三个值,该文本文件包含以下三行

代码语言:javascript
复制
221 
500.0200 
500.0000

然后通过下面的程序读取这个文件。

代码语言:javascript
复制
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

这个程序的结果是

代码语言:javascript
复制
      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),但我没有足够的声誉来评论和问一个问题的解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-19 20:47:18

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41751121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档