Fortran 从输入文件读取实值时出现浮点异常

Fortran 从输入文件读取实值时出现浮点异常,fortran,precision,gfortran,sigfpe,Fortran,Precision,Gfortran,Sigfpe,我尝试从Fortran中的输入文件中读取浮点值 为此,我使用以下代码: ... INTEGER :: nf REAL :: re OPEN(newunit=nf, file='toto.txt') READ(unit=nf, fmt=*) re ... toto.txt是一个包含我的真实值的文本文件: 10.1001 ! this value is supposed to be read by the Fortran program 如

我尝试从
Fortran
中的输入文件中读取浮点值

为此,我使用以下代码:

...
INTEGER            :: nf
REAL               :: re

OPEN(newunit=nf, file='toto.txt')

READ(unit=nf, fmt=*) re
...
toto.txt是一个包含我的真实值的文本文件:

10.1001 ! this value is supposed to be read by the Fortran program 
如果我像这样编译和执行,一切都很好

但是,当我使用
fpe
选项编译和执行时,会遇到一些麻烦。 我在读取行有一个错误,如下所示:

Program received signal SIGFPE: Floating-point exception - erroneous arithmetic operation

Backtrace for this error
#0  0xfffffff
#1  0xfffffff
...
我使用一个
gfortran
命令:
gfortran-g1-c-fbacktrace-ffpe trap=invalid、zero、overflow、underflow、increact、nonormal-Wall-fcheck=all my_prog.f90

我认为我的阅读行为是不正确的。
那么这个错误正常吗?是否有正确的方法读取实值?

浮点异常不精确和非规范的发生频率太高,并且在合法使用浮点运算时是不精确的。几乎所有现实世界中的浮点运算。甚至从文件或键盘上读取一个数字,因为并非所有的十进制数字都能准确地存储在二进制中。非规范化发生的频率稍低,但使用仍然是合法的


因此,捕获这些浮点异常是没有用的。甚至下溢也是有争议的。默认情况下,我不会捕获它,但我可以看到它的有用性。

我们需要完整的代码和输入文件。请看。行为不正常,问题可能在其他地方。嗯,不要使用不精确、非规范的,除非你非常清楚自己在做什么,否则你真的不想使用它!gfortran文档中写道:“许多(如果不是大多数的话)浮点操作由于舍入而导致精度损失,因此ffpe trap=inexecute在实践中很可能是无趣的。”我不再使用
不精确、非规范的
,但它不受欢迎吗?我想我犯的错误越多越好。无论如何,你是完全正确的,我的错误来自其他地方。当我尝试创建一个MWE时,我得到了相同的错误,但是在代码的另一部分,在阅读之后很久。所以我尝试了“打印toto”的方法来找出问题所在,然后在一些测试之后,错误再次出现在读取行。。。出现移动错误是非常令人不安的。我将尝试查找更多信息并编辑我的问题。不,问题是
不精确、非规范的
只会捕捉错误。它还捕获了完全精细的构造。太频繁了。