c/c++语言开发共享为什么在这个C代码中使用的IEEE-754指数偏差是126.94269504而不是127?

以下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笔记本 ,其中包含其算法的解释,其中包含“神秘” -126.94269值。
    如果您需要观看者,可以从Mathematica网站免费获取一个。

    编辑:由于我感觉很慷慨,这是截图表格中的相关部分。

    简单地说,他们解释说价值“更简单,更快,更准确”。
    他们没有使用-126.94269来代替-127 ,他们使用它来代替以下计算的结果(为简洁而舍入的值):

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

    好吧,不,126.94269504不是“更准确”的偏差值。 这段代码做的非常非常奇怪; 我很惊讶它的工作原理。 它需要一个浮点数就好像它们是一个int(根据我的经验通常会给你一个完全垃圾值,但可能没有),然后获取“垃圾”int值并将其转换回浮点数,然后做一些数学就可以了。 正如他们所说,这是一种快速且近似的做事方式,在这种情况下,采用base-2日志。 它根本不应该起作用,但是127和126.94269504之间的区别显然只是几个愚蠢的软糖因素中的一个,这些因素旨在从应该是无意义的代码中挽救一些含义。 (一种“两个几乎是错误使得几乎是正确的”的东西。)

    如果你想精确地提取浮点数的尾数和指数(尽管这不会像快速或近似那样),通常的方法是使用frexpf函数。

    需要了解更多c/c++开发分享为什么在这个C代码中使用的IEEE-754指数偏差是126.94269504而不是127?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享为什么在这个C代码中使用的IEEE-754指数偏差是126.94269504而不是127?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/980104.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐