我对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()还有其他用途吗?

最佳答案

an email responseTim Peters:



没什么深奥的-数学模块可提供C89标准中的所有功能
libm(以及一些扩展名),fabs()是std C89 libm函数。

(对我而言)没有一个清楚的理由说明为什么它会比
其他;听起来是偶然的;当然可以使math.fabs()更快
(目前(通过math_1实现),它可以承受一堆
通用“尝试猜测libm是否应设置errno”
浪费的样板(没有域或范围错误
可能适用于fabs())。

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

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

10-10 10:06