如何获得32位和64位实数的最小和最大指数?我正在做一些工作以避免下溢和溢出,并需要知道这些数字。
我还需要浮点数的基数。
在fortran中是否有可能获得相当于ilmach
?
答案 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()
。可以使用e
与exponent
和tiny
相结合找到指数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