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

Meaning of E-318 value taken by variable in Fortran

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

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

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