Я пытаюсь закодировать долготу / широту с помощью 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
i ' d ожидает двоичного представления 10, которое равно 00000000000000001010.