簡體   English   中英

boost::dynamic_bitset<> 奇怪的行為

[英]boost::dynamic_bitset<> strange behaviour

我正在嘗試用 22 位編碼經度/緯度,用 20 位編碼半徑,但半徑有些奇怪 - 請參見下面的 output,請...

#include <iostream>
#include <cassert>
#include <boost/dynamic_bitset/dynamic_bitset.hpp>
using namespace std;
 
boost::dynamic_bitset<> f2b(int n, float f) {
    assert(sizeof(float) == sizeof(int));
    union {
        float input;
        int output;
    } data;
 
    data.input = f;
    boost::dynamic_bitset<> bits(n, data.output);
                                                                                                               
    return bits;
}
 
int main() {
    // latitude
    cout << f2b(22, (-89.9 + 90) / 180) << '\n';
    // longitude
    cout << f2b(22, (-179.9 + 180) / 360) << '\n';
    // radius
    cout << f2b(20, 10.0) << '\n'; // why this returns '00000000000000000000' ?
 
    return 0;
}

$ ./bits 
0100011010001010110100
0100011010001010110100
00000000000000000000

我希望 10 的二進制表示是 00000000000000001010。

我用這個工具來計算 10.0f 的真實位表示,它是01000001001000000000000000000000

你的代碼做了什么,它返回你看到的00000000000000000000的低 20 位。

現在我想解釋如何修復您的代碼,但我不太確定您到底想做什么。 如果您能解釋,我會盡力建議正確的方法。

[已解決] 永遠不要不加思索地遵循客戶的規范 - 不可能用 20/22 位(例如 10.0 dec)對所有浮點數進行編碼。 謝謝@john。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM