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

Floating point exception when reading real values from an input file

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

为此,我使用以下代码:

...
INTEGER            :: nf
REAL               :: re

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

READ(unit=nf, fmt=*) re
...

with 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,inexact,denormal -Wall -fcheck=all my_prog.f90

我认为我的阅读操作不正确。 那么这个错误正常吗?有没有正确的方法来读取实际值?

浮点异常 inexactdenormal 发生得太频繁了,在合法使用浮点运算的过程中是不精确的。几乎所有 real-world 浮点运算。甚至从文件或键盘读取单个数字,因为并非所有十进制数都可以精确地存储为二进制。非正常发生的频率略低,但使用仍然是合法的。

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