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