[英]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.