Percebi que em python existem dois métodos semelhantes para encontrar o valor absoluto de um número:
Primeiro
abs(-5)
Segundo
import math
math.fabs(-5)
Como esses métodos diferem?
math.fabs()
converte seu argumento para float se puder (se não puder, ele lança uma exceção). Em seguida, ele assume o valor absoluto e retorna o resultado como um float.
Além de flutuantes, abs()
também funciona com inteiros e números complexos. Seu tipo de retorno depende do tipo de seu argumento.
In [7]: type(abs(-2))
Out[7]: int
In [8]: type(abs(-2.0))
Out[8]: float
In [9]: type(abs(3+4j))
Out[9]: float
In [10]: type(math.fabs(-2))
Out[10]: float
In [11]: type(math.fabs(-2.0))
Out[11]: float
In [12]: type(math.fabs(3+4j))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/home/npe/<ipython-input-12-8368761369da> in <module>()
----> 1 type(math.fabs(3+4j))
TypeError: can't convert complex to float
abs
funciona com muito mais do que apenas inteiros e flutuantes, e o tipo de resultado nem sempre é o mesmo que o argumento, por exemploabs(3+4j)
.fabs
demorar mais devido à sua natureza sempre flutuante e você terá a resposta certa!__builtin__.abs()
ser aplicadas com sucesso?__abs__
método mágicoEdit: como @aix sugeriu, uma maneira melhor (mais justa) de comparar a diferença de velocidade:
Portanto, parece que
abs()
tem apenas uma ligeira vantagem de velocidade sobre osfabs()
inteiros. Para flutuadoresabs()
efabs()
demonstre velocidade semelhante.Além do que @aix disse, mais uma coisa a se considerar é a diferença de velocidade:
Então
abs()
é mais rápido do quemath.fabs()
.fonte
from math import fabs
com certeza e experimente os-5.0
dois.math.fabs()
sempre retorna float, enquantoabs()
pode retornar um inteiro.fonte
abs
pode retornar qualquer tipo, dependendo do__abs__
método especial do tipo em que é chamado.abs()
: Retorna o valor absoluto de acordo com o argumento, ou seja, se o argumento for int, ele retornará int, se o argumento for float, ele retornará float. Também funciona em variáveis complexas, ou seja,abs(a+bj)
também funciona e retorna o valor absoluto, ou sejamath.sqrt(((a)**2)+((b)**2)
math.fabs()
: Funciona apenas com valores inteiros ou flutuantes. Sempre retorna o valor flutuante absoluto, não importa qual seja o tipo de argumento (exceto para os números complexos).fonte