实数的最小和最大浮点指数

时间:2015-07-08 12:34:19

标签: fortran gfortran

如何获得32位和64位实数的最小和最大指数?我正在做一些工作以避免下溢和溢出,并需要知道这些数字。

我还需要浮点数的基数。

在fortran中是否有可能获得相当于ilmach

2 个答案:

答案 0 :(得分:2)

函数range()返回指数范围。内部函数huge()返回给定数字类型的最大允许数。从那里你可以通过使用对数来看到指数。另请参阅selected_real_kind()

gfortran和其他普通编译器的基础是2,但您可以使用radix()进行测试。它们将来可能会有10种基础。

在我链接的相同手册中,您会找到其他有用的内在函数,例如tiny(), precision(), epsilon(), spacing(),您可以按照&#34中的链接;另请参阅:"。

答案 1 :(得分:2)

对于非零实数,数值模型看起来像s*b^e*\sum_{k=1}^{p}f_k*b^{-k}

要获取基础b的值,请使用radix()。可以使用eexponenttiny相结合找到指数huge的最小值和最大值。

use, intrinsic :: iso_fortran_env, only : real32, real64

print 1, "real32", RADIX(1._real32), EXPONENT(TINY(1._real32)), EXPONENT(HUGE(1._real32))
print 1, "real64", RADIX(1._real64), EXPONENT(TINY(1._real64)), EXPONENT(HUGE(1._real64))

1 FORMAT (A," has radix ", I0, " with exponent range ", I0, " to ", I0, ".")
end