0

我需要将 C/C++ double 转换为 64 位二进制补码,其中 Radix 点位于第 19 位(含)。

这意味着对于我要转换为的格式

  • 0x0000 0000 0010 0000 是数字 1
  • 0xFFFF FFFF FFF0 0000 是数字-1
  • 0x0000 0000 0000 0001 是 0.95 x 10^-6
  • 0xFFFF FFFF FFFF FFFF 为 -0.95 x 10^-6

到目前为止,我一直在使用 C 标准库中的 modf 函数,但这并不能真正满足我的需求。我还查看了 Boost 中的一些类型转换类,但我也找不到合适的解决方案。有谁知道图书馆或简单的方法来进行这种转换?也许更熟悉 Boost 的人可以为我指明正确的方向。

如果有帮助,这里有一些关于如何存储双打的文档。

编辑:

我有一个后续问题,这真的是为了我自己的利益。什么是“基数”?这里有点像小数点。但是,我唯一一次听到基数这个词是在我学习离散快速傅里叶变换的时候。如果我没记错的话,Radix-II 方法很快,因为计算 DFT 所需的乘法更少。

4

2 回答 2

4

这应该给出你想要的结果:

double d = someValue();
int64_t fixed_point = static_cast<int64_t>(d * (1024*1024));
于 2009-07-24T17:44:05.780 回答
1

乘以 2^20,然后转换为您的目标整数类型(可能是 long long)

于 2009-07-24T17:43:19.730 回答