C / C ++中的数值转换

时间:2009-07-24 17:25:44

标签: c++ c boost type-conversion fixed-point

我需要将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的人可以指出我正确的方向。

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

编辑:

我有一个跟进问题,这真的是出于我自己的兴趣。什么是'Radix'?这有点像小数点。但是,在我学习离散快速傅立叶变换时,我唯一一次听到Radix这个术语。如果我没记错的话,Radix-II方法很快,因为需要计算DFT的乘法次数较少。

2 个答案:

答案 0 :(得分:4)

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

double d = someValue();
int64_t fixed_point = static_cast<int64_t>(d * (1024*1024));

答案 1 :(得分:1)

乘以2 ^ 20,然后转换为您定位的整数类型(可能很长)