abs () vs fabs () разность скоростей и преимущество fabs ()

Я провел несколько простых тестов функций 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 () – сделать ваш код более читаемым, потому что, используя его, вы четко заявляете о своем намерении работать с значениями float / double point

Есть ли другое использование fabs ()?

One Solution collect form web for “abs () vs fabs () разность скоростей и преимущество fabs ()”

Из письма от Тима Питерса :

Почему математика имеет функцию fabs? И это, и функция встроенного abs завершают вызов fabs () для поплавков. abs () быстрее загружается.

Ничего глубокого – математический модуль поставляет все в стандартный libm C89 (+ несколько расширений), fabs () – это std C89 libm.

Не существует ясной (для меня) причины, по которой человек был бы быстрее, чем другой; звучит случайно; math.fabs (), безусловно, можно было бы сделать быстрее (как в настоящее время реализовано (через math_1), оно переносит кучу общего назначения «попытайтесь угадать, должен ли libm должен был установить ошибочный» шаблон, который был потрачен впустую (ошибок домена и диапазона не существует для fabs ())).

Кажется, нет никаких выгод для использования fabs . Просто используйте abs для практически всех целей.

Python - лучший язык программирования в мире.