【发布时间】:2015-07-08 22:01:45
【问题描述】:
如何获得 32 位和 64 位实数的最小和最大指数?我正在做一些工作以避免下溢和上溢,并且需要知道这些数字。
我还需要浮点数的基数。
在 fortran 中是否有可能获得 ilmach 的等价物?
【问题讨论】:
-
请不要以使现有答案无效的方式编辑问题。我不知道
ilmach是什么。 -
这是旧的贝尔实验室端口库
如何获得 32 位和 64 位实数的最小和最大指数?我正在做一些工作以避免下溢和上溢,并且需要知道这些数字。
我还需要浮点数的基数。
在 fortran 中是否有可能获得 ilmach 的等价物?
【问题讨论】:
ilmach 是什么。
对于非零实数,数值模型类似于 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
【讨论】:
exp (x) 计算 x 的底数 e 指数。如何得到 x 的底数 b 指数,这里 b 是任意数?
exponent 不是 exp。
函数range() 返回指数范围。内部函数huge() 返回给定数字类型的最大允许数。从那里你也可以通过使用对数来看到指数。另见selected_real_kind()。
gfortran 和其他普通编译器的基数是 2,但您可以使用 radix() 对其进行测试。将来它们可能是一些基本的 10 种。
在我链接的同一手册中,您会发现其他有用的内在函数,例如 tiny(), precision(), epsilon(), spacing(),您可以点击“另请参阅:”中的链接。
【讨论】:
precision() 内在函数或阅读 en.wikipedia.org/wiki/Single-precision_floating-point_format