【发布时间】:2011-12-16 17:36:02
【问题描述】:
给定double x,并假设它位于[0,1]。例如假设 x=0.3
二进制,(保留小数点后10位),表示为
x=0.0100110011...
我想编写一些 C++ 代码来提取小数点后显示的 10 位数字。也就是说我要提取整数(0100110011)_2。
现在我对位移很陌生,我对这个问题的(天真的)解决方案如下
int temp= (int) (x*(1<<10))
然后temp 二进制将有必要的 10 位数字。
这是执行上述过程的安全方法吗?或者是否有更安全/更正确的方法来做到这一点?
注意:我不希望以字符数组的形式提取数字。我特别想要一个整数(或无符号整数)。这样做的原因是在八叉树的生成中,空间中的点根据它们的位置被赋予哈希键,称为莫顿键。这些键通常存储为整数。在获得所有点的积分键后,它们将被排序。从理论上讲,这些密钥可以通过将坐标缩放到 [0,1]、提取位并交错来获得。
【问题讨论】:
-
10 位二进制数还是十进制数?
-
为什么不打印整个尾数,并根据需要在前面加上尽可能多的零?
-
@Mooing Duck 对不起,我不明白为什么。
-
您还应该知道,由于本福德定律,您不会得到均匀分布:en.wikipedia.org/wiki/Benford%27s_law
标签: c++ binary floating-point bit-manipulation