gIEEE_UNDERFLOW_FLAG IEEE_DENORMAL in Fortran 77



我是Fortran的新手和一般编码,因此,如果我的术语不正确,我深表歉意。

我正在使用带有Gfortran编译器的Linux机器。

我今年夏天正在进行研究,这涉及我在1980年左右撰写的计划。它用Fortran 77编写。我有所有代码以及有关它的一些文档。

以当前形式,我正在收到" ieee_underflow_flag ieee_denormal"错误。我的第一个想法是,该代码是在不同的环境/架构下开发的。

文档指出:"该程序旨在在Harris计算机系统上运行。如果单个精度变量更改为主代码和子例程软件包中的双精度变量,也可以在VAX系统上运行。"

我尝试将单个精度变量更改为双精度变量,但是我可能做错了。如果这是正确的见解,那将是很棒的。

我还尝试用-STD = legacy和-m32编译编码。我也收到同样的错误。

任何建议让我朝着正确方向前进的建议将不胜感激。

" ieee_underflow_flag ieee_denormal是信号"并不少见。它是不是错误消息

的意思是运行代码时会生成非变性数。

这可能是关于代码中数值问题的提示,但本身并不是错误。可能意味着您的程序成功完成。

最新版本中的fortran要求在执行STOP语句时报告所有浮点异常。请参阅GFORTRAN IEEE异常不精确,这也意味着您的程序不是被汇编为Fortran 77,而是Fortran 2003或更高。

请注意,即使您请求fortran 95标准-std=f95,该注释仍会显示,但可以由-ffpe-summary=list标志控制。

链接的答案还说,避免这些警告的一种方法是不要通过STOP语句完成程序,而是通过运行到END PROGRAM来完成该程序。如果您有

之类的东西
STOP
END

STOP
END PROGRAM

在您的代码中,只需删除 STOP,即使没有有害,它都是无用的。

您可能,但是您不必通过使用双重精度成功地摆脱它。如果算法中存在数值问题,即使有双打,它们也会留在那里。但是它们可能会变得不那么明显。否则他们可能不是,这取决于。您不必为此重写代码,只需使用-fdefault-real-8-freal-4-real-8或类似的代码即可。在Gfortran手册中阅读有关这些选项的更多信息。您甚至可以尝试四倍的精度,但是双倍对于所有合理的算法就足够了。

最新更新