以下c函数来自fastapprox项目。

static inline float
fasterlog2 (float x)
{
  union { float f; uint32_t i; } vx = { x };
  float y = vx.i;
  y *= 1.1920928955078125e-7f;
  return y - 126.94269504f;
}

一些专家能解释一下为什么上面代码中使用的指数偏差是126.94269504而不是127吗?是不是更准确的偏差值?

最佳答案

在您链接的项目中,它们包含一个Mathematica notebook并解释了它们的算法,其中包括“神秘的”-126.94269值。
如果您需要一个查看器,您可以从Mathematica website免费获得一个。
编辑:因为我感觉很慷慨,这里有相关的章节in screenshot form
简单地说,他们解释说这个值“更简单、更快、更不准确”。
他们不是用-126.94269来代替-127,而是用它来代替以下计算的结果(为简洁起见,四舍五入的值):

-124.2255 - 1.498 * mx - (1.72588 / (0.35201 + mx))

关于c - 为什么在此C代码中使用的IEEE-754指数偏差为126.94269504,而不是127?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31081655/

10-11 17:57