实名反对一楼 @Yong He 的答案。
单精度的浮点数结构是这样:
那么现在,每个正浮点数 y 可以用尾数和指数的形式写成 ,其中 m 是尾数部分,取值范围是 ;e 是指数部分,一个整数。每个浮点数所对应的「整数形式」则可以用表示,其中 L 是指数部分需要的位移次数(用 2 的幂表示),E 和 M 是指数部分和小数部分的整数版本。两者之间的关系是
对单精度浮点而言,。
考虑对数 ,由于,,取近似,可以算出整体「偏差」最小的,此时两者基本相当。因此我们可以说
……………… (1)
那么,对于 y 的整数形式 Y 而言,展开并带代入 (1) 有:
即
………………(2)
那么对于 来说,,代入 (2) 得:
解得
。
这个就是代码
i = 0x5F3759DF - ( i >> 1 );
的秘密所在。0x5F3759DF 的具体取值是根据 δ 变的,至于卡马克为啥用 0x5F3759DF 而不是其他相近的值,估计是做实验测的吧……
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有