« 楼上的装修已经有些日子了 | 返回首页 | 利用 Cache 减少传输的数据量 »

搞清楚“为什么”

前几天写了篇关于整数和浮点互相转换的blog,那个数字的确奇妙。我当时想,原理也不应该复杂,就没去管它。

今天程序里突然发现一个 bug,就是由这个技巧引起的。有的地方对,有的地方不对。转出来成了0。

百思不得其解,只好老老实实研究这个技巧是如何工作的。然后才明白是浮点精度控制问题。我们的项目使用 d3d 的 client 在 d3d 设备初始化后,由于 d3d 修改了double 运算的精度。

要想放心的用任何一个技巧,know why 永远是前提啊。

Comments

调整了浮点运算精度后,这个技巧基本不可用。如果通过移位等技巧继续使用,就意义不大了 :)

关于原理,和相关的一些东西,我昨天已经补在原帖中了。

那天我看到你的帖子之后就去试验了一下,用计算器按过几分钟之后明白原理了,那个magic number正好可以调整指数使得最低位刚好对应整数位。
在加上一个32位整数的范围的数的时候,因为这个数远远小于magic number,指数不会变化,又因为32位以上还有一个1可以在减小的时候退位提供补码,所以可以让后面32位总是整数的那32位。
如果调整了浮点精度,那么magic number的指数必须也调整,使得刚好可以让整数位处于最低位

深有体会!

会心一笑...^_^

有些技巧的确是当时爽过后痛,
更可怕的是不知道为什么痛--因为很可能就想不到这里来

know why 永远是前提啊。^_^

Post a comment

非这个主题相关的留言请到:留言本