将二进制整数转换为二进制分数

时间:2015-01-19 15:53:23

标签: c++

我正在生成整数(让我们称它们为“m_i”,其中i是整数)。例如,我可以生成m_5 = 31(= 11111)。每个m_i都有一个限制,即每个m_i必须是一个奇数,并且必须小于2 ^ i。这样做的原因是我实际上对生成值v_i感兴趣,其中v_i = m_i /(2 ^ i)。 (对于任何感兴趣的人,这是一个Sobol序列生成器)

现在,m_i只是小数点后v_i的二进制扩展(例如v_5 = 0.11111),理想情况下我希望能够简单地将m_i移位i位以获得v_i。但是,这在c ++中是粗略的,非法的,因为我不能使用浮点数或双精度的位操作。

现在我正在使用整数功率的快速实现,只需使用以下行:

v[i] = ((double)m[i]) / ((double)ipow(2,i+1));

这很好但是这是一个O(log n)计算,实际上,应该有一种方法在O(1)中执行此操作。是否有任何向导可以告诉我是否有更好的方法可以达到预期的效果?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

感谢The Paramagnetic Croissant

m[i] / (1 << i + 1)