计算倒数:n **( - 1)还是(1 / n)?

时间:2011-09-26 12:11:23

标签: python math computer-science

在random.py的源代码中,有以下常量定义:

BPF = 53        # Number of bits in a float
RECIP_BPF = 2**-BPF

我不是数学专业,但通过在它上面放置1来反转BPF是否更具可读性?

或者是否有关于乘法的东西比编程中的除法更方便?


没关系。

为了清理我的问题,我发现了这个:

“在许多机器上,特别是那些没有硬件支持的机器上,除法是比乘法更慢的操作,因此这种方法可以产生相当大的加速。第一步相对较慢但只需要进行一次。”

http://en.wikipedia.org/wiki/Multiplicative_inverse

3 个答案:

答案 0 :(得分:3)

RECIP_BPF,尽管它的名字,但不是1 / BPF。它是1 /(2 ^ BPF)。我不能代表所有人发言,但我发现2**-BPF1.0/2**BPF更容易阅读。

请注意,乘法和除法的速度在这里并不重要;特别是,由于这些是常量,编译器或解释器只需要对它们进行一次评估(编译器甚至可以在编译时进行评估)。此外,由于这些是2的精确幂,因此可以使用浮点使用二进制编码的事实直接生成结果而不进行乘法或除法。

答案 1 :(得分:1)

“2 ** - BPF”意味着2升至-BPF力量。

答案 2 :(得分:1)

可重复性是主观的。也就是说,我个人认为2**-BPF1.0/2**BPF更容易阅读(2**BFP附近有或没有括号)。

至于性能差异,我怀疑它们是否相关,因为表达式仅在导入模块时被评估一次。