给定double x
,并假设它位于[0,1]
。假设例如x = 0.3
在二进制中,(小数点后保留10位数),表示为
x=0.0100110011...
我想编写一些C ++代码,它将提取小数点后面显示的10位数字。换句话说,我想提取整数(0100110011)_2。
现在我对比特转换很新,我对这个问题的(天真)解决方案如下
int temp= (int) (x*(1<<10))
然后二进制中的temp
将具有必要的10位数字。
这是否是执行上述过程的安全方式?或者有更安全/更正确的方法吗?
注意 :我不希望以字符数组的形式提取数字。我特别想要一个整数(或无符号整数)。这样做的原因是,在生成八叉树时,空间中的点根据其名为Morton Keys的位置给出散列键。这些键通常存储为整数。在获得所有点的积分键之后,它们将被分类。从理论上讲,这些密钥可以通过将坐标缩放到[0,1],提取比特并交织它们来获得。
答案 0 :(得分:1)
使用memcpy
将double复制到32位数字的数组中,如下所示:
unsigned int b[2]; // assume int is 32-bits
memcpy(b, &x, 8);
最多10个有效二进制数字位于b[0]
或b[1]
,具体取决于您的计算机是大端还是小端。
union
。
答案 1 :(得分:0)
阅读本文:http://chrishecker.com/images/f/fb/Gdmfp.pdf
如果您可以了解该文章告诉您的内容,您可以推导出您正在寻找的算法。只记得指数中的偏差因子和尾数中隐含的前导因子,其余部分应该落实到位。