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

标签 python function absolute-value

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

1) 慢

2) 仅适用于 float

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

float 更慢!

从我的立场来看,使用 fabs() 的唯一优势是使您的代码更具可读性,因为通过使用它,您清楚地表明了您使用浮点/双点值的意图

fabs()还有其他用途吗?

最佳答案

来自 an email response来自 Tim Peters :

Why does math have an fabs function? Both it and the abs builtin function wind up calling fabs() for floats. abs() is faster to boot.

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

没有一个明确的(对我而言)为什么一个会比 其他;听起来很意外; math.fabs() 当然可以做得更快 (如目前实现的(通过 math_1),它忍受了一堆 通用“尝试猜测 libm 是否应该设置 errno” 浪费的样板文件(没有域或范围错误 fabs())) 是可能的。

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

关于python - abs() vs fabs() 速度差异和 fabs() 的优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21994052/

相关文章:

python - 如何插入部分 Pandas 数据框

python - DRF,将自定义字段添加到 ModelSerializer

python - 为什么 sys.stdout = None 有效?

java - jfreechart自定义饼图显示绝对值和百分比

javascript - 如何在不使用 Math.abs 的情况下获得整数的绝对值?

python - 使用没有特定端口的 UDP 进行组播

javascript - 能够获取元素长度但不能获取 innerHTML

javascript - 如何使用此 Javascript 解决方案在 Web 表单上的 div 之间正确切换?

python - 是否可以在 python 的列表理解中调用函数(不是内置函数)?

python - 在python中 float 为整数