搞清楚“为什么”
前几天写了篇关于整数和浮点互相转换的blog,那个数字的确奇妙。我当时想,原理也不应该复杂,就没去管它。
今天程序里突然发现一个 bug,就是由这个技巧引起的。有的地方对,有的地方不对。转出来成了0。
百思不得其解,只好老老实实研究这个技巧是如何工作的。然后才明白是浮点精度控制问题。我们的项目使用 d3d 的 client 在 d3d 设备初始化后,由于 d3d 修改了double 运算的精度。
要想放心的用任何一个技巧,know why 永远是前提啊。
« 楼上的装修已经有些日子了 | 返回首页 | 利用 Cache 减少传输的数据量 »
前几天写了篇关于整数和浮点互相转换的blog,那个数字的确奇妙。我当时想,原理也不应该复杂,就没去管它。
今天程序里突然发现一个 bug,就是由这个技巧引起的。有的地方对,有的地方不对。转出来成了0。
百思不得其解,只好老老实实研究这个技巧是如何工作的。然后才明白是浮点精度控制问题。我们的项目使用 d3d 的 client 在 d3d 设备初始化后,由于 d3d 修改了double 运算的精度。
要想放心的用任何一个技巧,know why 永远是前提啊。
Comments
调整了浮点运算精度后,这个技巧基本不可用。如果通过移位等技巧继续使用,就意义不大了 :)
关于原理,和相关的一些东西,我昨天已经补在原帖中了。
Posted by: Cloud | (4) February 28, 2006 01:30 PM
那天我看到你的帖子之后就去试验了一下,用计算器按过几分钟之后明白原理了,那个magic number正好可以调整指数使得最低位刚好对应整数位。
在加上一个32位整数的范围的数的时候,因为这个数远远小于magic number,指数不会变化,又因为32位以上还有一个1可以在减小的时候退位提供补码,所以可以让后面32位总是整数的那32位。
如果调整了浮点精度,那么magic number的指数必须也调整,使得刚好可以让整数位处于最低位
Posted by: Atry | (3) February 28, 2006 01:07 PM
深有体会!
Posted by: ALL开拓者 | (2) February 28, 2006 09:55 AM
会心一笑...^_^
有些技巧的确是当时爽过后痛,
更可怕的是不知道为什么痛--因为很可能就想不到这里来
know why 永远是前提啊。^_^
Posted by: Zenberg | (1) February 28, 2006 03:22 AM