不正确的64位除法

时间:2013-05-11 15:55:45

标签: matlab math 64-bit division

我将32位数字乘以相同的数字以获得它们的2的幂。然后我想得到某些位并留下其余的,但结果会四舍五入而不准确。

例如,我想要计算fec2b8f7 × fec2b8f7 = fd86fb26fffffe51(用十六进制表示法),在MATLAB中它是这样的:

>> (((uint64(hex2dec('fec2b8f7'))) * (uint64(hex2dec('fec2b8f7')))))

ans =   
   fd86fb26fffffe51

哪个是对的。从这个64位十六进制数字我想要得到最高34位,所以要从64位中获得前34位,你需要除去最后30位,但除以2:

>> (((uint64(hex2dec('fec2b8f7'))) * (uint64(hex2dec('fec2b8f7'))))) / uint64(2^30)

ans =
   00000003f61bec9c

可悲的是,结果并不正确,因为它是四舍五入的。正确的结果应该是00000003f61bec9b。

有没有办法从64位数中获得34位而不进行舍入?我尝试了floor,但是在除法运算完成之后它才起作用,这得到了错误的答案。

1 个答案:

答案 0 :(得分:3)

您可以尝试bitshift

left34 = bitshift(num64, -30)

(负移位距离向右移动)