【问题标题】:The minimum and maximum floating point exponent of a real number实数的最小和最大浮点指数
【发布时间】:2015-07-08 22:01:45
【问题描述】:

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

我还需要浮点数的基数。

在 fortran 中是否有可能获得 ilmach 的等价物?

【问题讨论】:

  • 请不要以使现有答案无效的方式编辑问题。我不知道ilmach 是什么。
  • 这是旧的贝尔实验室端口库

标签: fortran gfortran


【解决方案1】:

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

要获取基础b 的值,请使用radix()。指数e 的最小值和最大值可以通过exponent 结合tinyhuge 找到。

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
【解决方案2】:

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

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

在我链接的同一手册中,您会发现其他有用的内在函数,例如 tiny(), precision(), epsilon(), spacing(),您可以点击“另请参阅:”中的链接。

【讨论】:

猜你喜欢
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
  • 2019-04-30
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
  • 1970-01-01
  • 2019-07-31
相关资源
最近更新 更多