abs()vs fabs()速度差异和fabs的优势()

时间:2014-02-24 16:58:55

标签: python function absolute-value

我在abs()和fabs()函数上运行了一些简单的测试,我不明白使用fabs()有什么好处,如果是:

1)慢一点

2)仅适用于花车

如果在其他类型

上使用,

3)将抛出异常

In [1]: %timeit abs(5)
10000000 loops, best of 3: 86.5 ns per loop

In [3]: %timeit fabs(5)
10000000 loops, best of 3: 115 ns per loop

In [4]: %timeit abs(-5)
10000000 loops, best of 3: 88.3 ns per loop

In [5]: %timeit fabs(-5)
10000000 loops, best of 3: 114 ns per loop

In [6]: %timeit abs(5.0)
10000000 loops, best of 3: 92.5 ns per loop

In [7]: %timeit fabs(5.0)
10000000 loops, best of 3: 93.2 ns per loop

浮子上的速度更慢了!

我站在哪里使用fabs()的唯一好处是让你的代码更具可读性,因为通过使用它,你明确表明你使用浮点/双点值的意图

有没有其他用途的fabs()?

1 个答案:

答案 0 :(得分:18)

来自an email responseTim Peters

  
    

为什么数学有fabs功能?它和abs内置功能     结束了为花车调用fabs()。 abs()启动速度更快。

  
     

没什么深刻的 - 数学模块提供C89标准中的所有内容   libm(+一些扩展),fabs()是一个标准的C89 libm函数。

     

没有一个明确的(对我来说)理由为什么一个人会更快   其他;听起来很意外; math.fabs()当然可以更快   (正如目前所实施的(通过math_1),它经历了一堆   通用“试图猜测libm是否应该设置errno”   浪费的样板(没有域或范围错误   可能为fabs()))。

似乎没有理由使用fabs。只需使用abs几乎用于所有目的。