我对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 response到Tim 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/