【发布时间】:2017-06-25 04:54:02
【问题描述】:
我尝试从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
我认为我的阅读操作不正确。 那么这个错误正常吗?是否有读取实际值的正确方法?
【问题讨论】:
-
我们需要完整的代码和输入文件。请参阅minimal reproducible example。行为不正常,问题可能出在其他地方。
-
呃,不要使用
inexact,denormal,除非你非常清楚自己在做什么,否则你真的不想使用它! -
来自 gfortran 文档:“许多(如果不是大多数)浮点运算会由于舍入而导致精度损失,因此 ffpe-trap=inexact 在实践中可能没有意义。”跨度>
-
我不会再使用
inexact, denormal了,但不是很感激吗?我认为我能抓住的错误越多,它就越好。无论如何,你是完全正确的,我的错误来自其他地方。当我尝试创建 MWE 时,我得到了同样的错误,但在阅读后很长时间的代码的另一部分。因此,我尝试使用“打印 toto”方法来查找问题所在,然后经过一些测试后,错误再次出现在读取行……移动错误非常令人不安。我将尝试查找更多信息并编辑我的问题。 -
不,问题是
inexact, denormal确实只是捕捉错误。它还捕获了完全精细的构造。太频繁了。
标签: fortran precision gfortran sigfpe