繁体   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