0

我正在尝试调试 Fortran 程序。为了捕捉浮点错误,我为 gfortran 4.9.0 使用了以下编译器选项:

FFLAGS1 = -std=f2003 -ffree-form -fdefault-real-8 -fdefault-double-8  \
          -Ofast -fall-intrinsics -fcheck=all -m64 \
          -fno-trapping-math -c \
          -ffpe-trap=invalid,zero,overflow,underflow,precision,denormal -Wall

使用这些选项,程序在这一行失败:

read(ctrlUnit,*) slope_fasst, aspect

尝试读取这些输入时:10.0 70.0

如果我删除

-ffpe-trap=invalid,zero,overflow,underflow,precision,denormal

从编译器选项中,它读取以下行就好了。两个变量都声明为real(8). 在输入文件中,我尝试了空格、逗号等,但没有看到任何变化。有人有建议吗?

4

1 回答 1

1

似乎 gfortran-ffpe-trap,precision标志会导致完全正常/常规读/写操作的错误。

例如,这个程序抛出一个“浮动异常”错误:

    write(*,*)1.0
    end

(gfortran 4.1.2,redhat linux)

解决方案,不要使用该标志。

请注意,这是有道理的,因为从机器号到/从 ascii 的转换会导致精度损失(我不确定这是否是标志的意图来捕捉这种情况)

于 2015-04-03T18:20:04.420 回答