Fortran 中变量获取的 E-318 值的含义

Meaning of E-318 value taken by variable in Fortran

提问人:Babaji 提问时间:2/23/2022 最后编辑:Ian BushBabaji 更新时间:2/24/2022 访问量:119

问:

我正在 Fortran 90 中执行一些计算。一个特定的变量(声明为隐式双精度)取的值类似于 。起初,我忽略了它,假设它可能只是零(变量应该取的值也是零)。但是现在我想知道 E-318 是否表示我的代码中有错误。我也在问这个问题,因为这个变量在循环中的各个点都取这样的值,有时变量也取它的值。这表明我的代码中肯定存在错误,但我有一个不同的问题。一般来说,这些变量在 Fortran 90 中可以取的最大值和最小值是多少?-1.0420437349566899E-318NaN

浮点 Fortran 精度

评论

1赞 Vladimir F Героям слава 2/23/2022
请使用标签 fortran。您应该显示您的代码。它可以是正确的答案,也可能是一个错误,如果没有你的代码和你正在解决的数学,我们怎么能知道呢?有时甚至可能是正确的答案。我们还有其他关于最小值和最大值的问题。请参阅 和 内部函数。NaNtiny()huge()
3赞 Vladimir F Героям слава 2/23/2022
10^-318 显然非常小(例如,对于物理学中出现的任何事物来说都太小了),并且接近 binary64 的下限。但是,我们不能说您的代码是否有错误,或者它是否是您的算法的正确结果。尝试启用浮点异常 (FPE),包括下溢。检查程序中是否有未定义(未初始化)的值。
1赞 High Performance Mark 2/23/2022
一般来说,这些变量在 Fortran 90 中可以取的最大值和最小值是多少?看看 和 内部函数。hugetiny
1赞 veryreverie 2/23/2022
另请参阅浮点数学是否损坏?
1赞 chtz 2/23/2022
如果得到的值不能以数字方式出现,则可能表示单位化变量。也就是说,您只是得到之前在该内存位置的任何位模式,但被解释为 .也许你的编译器有一些选项可以警告这一点。double

答:

3赞 Eric Postpischil 2/24/2022 #1

-1.0420437349566899E-318表示 −1.0420437349566899 • 10−318,即大约 −1 乘以 −318 的幂。“E”代表十的指数。

这是一个非常小的数字。它的幅度低于IEEE-754“双精度”浮点格式(binary64)中的最小正常数,即2−1022,约为−1.11254•10−308该星等高于可表示的小数字,即次正常数 2−1074,约为 4.94•10−324。当结果中出现这么小的数字时,可能是因为重复乘以小于 1 的数字。例如,在设计用于产生回声的音频滤波器中,每次重复的音量都低于前一个,如果没有新的传入声音覆盖它们,则先前声音的幅度最终将达到低于正常范围。当变量未初始化或表示不同类型数据的字节被重新解释为浮点类型时,也会发生这种情况。