从浮点数中提取数字
Extracting digits from a float C++
给定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],提取比特并将它们交错来获得。
使用memcpy
将double复制到32位数字数组中,如下所示:
unsigned int b[2]; // assume int is 32-bits
memcpy(b, &x, 8);
二进制的前10位有效数字在b[0]
或b[1]
中,这取决于您的机器是大端还是小端。
编辑:同样可以通过一些强制转换而不是memcpy来实现,但这会违反严格的混叠规则。另一种方法是使用union
.
阅读:http://chrishecker.com/images/f/fb/Gdmfp.pdf
如果你能理解那篇文章告诉你的,你就能推导出你正在寻找的算法。只要记住指数中的偏置因子和尾号中的隐式前导因子,其余的应该各就各位。
相关文章:
- 如何从也包含C++字母的文本文件中提取某些数字?
- 如何从适合一定范围的数字中提取数字?
- std::regex:匹配由数字和空格组成的字符串,并提取数字.如何?
- 从迭代器中提取数字
- 如何安全地将有符号字段从uint32_t提取到有符号数字(int或uint32_t)中
- 如何从txt文件c++中提取括号之间的数字
- 如何将ASCII数字转换为从文件中提取的整数
- 如何提取给定数字的 p MSB 位
- printf如何从浮点数字中提取数字
- 使用boost::filesystem和boost::lexical_cast从文件名中提取数字
- 在循环中使用字符串流从几个字符串中提取数字
- 从字母数字 QString 中提取编号
- 从C++字符串中提取数字
- C 正则是从字符串中提取所有可能的10位数字
- 从数组中提取一对数字
- 尝试编写函数尝试从字符串中提取数字,但它返回不相关的数字
- 接受多个输入(如 +、- 和平方数字)的计算器.从文本文件中提取信息
- 长方程加法/减法计算器,从文本文件中提取运算符和数字
- 仅使用关键字和数字提取来解析简单语法
- 将文件中的值存储到数组中,并根据特定数字提取值