4

我尝试从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,inexact,denormal -Wall -fcheck=all my_prog.f90

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

4

1 回答 1

3

浮点异常不精确非规范发生得太频繁了,并且在合法使用浮点运算期间是不精确的。几乎所有现实世界的浮点运算。即使从文件或键盘读取单个数字,因为并非所有十进制数字都可以完全以二进制形式存储。异常发生的频率略低,但使用仍然是合法的。

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

于 2017-02-10T16:12:03.467 回答