我正在尝试用22位编码经度/纬度,用20位编码半径,但是半径有些奇怪-请参见下面的输出...
#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。
答案 0 :(得分:1)
我使用此tool来计算10.0f的真实位表示形式,即01000001001000000000000000000000
。
您的代码执行的操作将返回您看到的00000000000000000000
的后20位。
现在,我想解释一下如何修正您的代码,但是我不确定自己到底想做什么。如果您能解释,我会尽力建议正确的方法。
答案 1 :(得分:1)
[已解决]永远不会遵循客户的要求而没有思考-无法用20/22位(例如10.0 dec)编码所有浮点数。谢谢@约翰。