32 ビットの数値に同じ数値を掛けて 2 の累乗を取得しています。次に、特定のビットを取得して残りを残したいのですが、結果は丸められ、正確ではありません。
たとえば、fec2b8f7 × fec2b8f7 = fd86fb26fffffe51
(16 進表記で) 計算したいものは、MATLAB では次のようになります。
>> (((uint64(hex2dec('fec2b8f7'))) * (uint64(hex2dec('fec2b8f7')))))
ans =
fd86fb26fffffe51
どちらが正しい。この 64 ビットの 16 進数から上位 34 ビットを取得したいので、64 ビットから最初の 34 ビットを取得するには、最後の 30 ビットを取り除く必要がありますが、2 で除算します。
>> (((uint64(hex2dec('fec2b8f7'))) * (uint64(hex2dec('fec2b8f7'))))) / uint64(2^30)
ans =
00000003f61bec9c
悲しいことに、丸められたため、結果は正しくありません。正しい結果は 00000003f61bec9b です。
丸めずに 64 ビット数から 34 ビットを取得する方法はありますか? を試してみfloor
たのですが、割り算をするまでうまくいかず、不正解です。