首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IEEE_UNDERFLOW_FLAG IEEE_DENORMAL在Fortran 77

IEEE_UNDERFLOW_FLAG IEEE_DENORMAL在Fortran 77
EN

Stack Overflow用户
提问于 2017-06-01 13:14:35
回答 1查看 34.6K关注 0票数 8

我是新的Fortran和编码在一般情况下,所以我道歉,如果我的术语不正确。

我使用的是带有gfortran编译器的Linux机器。

今年夏天,我正在做研究,这涉及到我在1980年前后写的一个程序,重新开始工作。它是用Fortran 77写的。我有所有的代码和一些关于它的文档。

以它当前的形式,我收到了一个"IEEE_UNDERFLOW_FLAG IEEE_DENORMAL“错误。我的第一个想法是,这段代码是在不同的环境/架构下开发的。

文件中说:“这个程序是为了在HARRIS计算机系统上运行而设计的。如果将单精度变量转换为主代码和子程序包中的双精度变量,也可以在VAX系统上运行。“

我尝试过将单精度变量改为双精度变量,但我可能做错了。如果这是正确的事情做任何洞察力将是伟大的。

我也尝试过用-std=legacy和-m32编译代码。我也收到了同样的错误。

任何能让我走上正确方向的建议都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2017-06-01 14:05:04

"IEEE_UNDERFLOW_FLAG IEEE_DENORMAL is signalling“并不少见。这是,而不是错误消息

这意味着在运行代码时会生成非正态数

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

Fortran在其最新版本中要求在执行STOP语句时报告所有正在发出信号的浮点异常。请参阅gfortran IEEE异常不精确 BTW,这也意味着您的程序不是编译为Fortran 77,而是编译为Fortran 2003或更高版本。

请注意,即使您通过-std=f95请求Fortran 95标准,说明仍然显示,但它可以由-ffpe-summary=list标志控制。

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

代码语言:javascript
运行
复制
STOP
END

代码语言:javascript
运行
复制
STOP
END PROGRAM

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

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

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44308577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档