HOWTO · Python
Como usar o número de Euler em Python
Use math.e, math.exp() e numpy.exp() corretamente para o número de Euler em Python.
Nesta página
Use math.e quando precisar do valor de ponto flutuante do número de Euler, math.exp(x) quando precisar elevar e a um expoente escalar e numpy.exp(values) quando esse cálculo precisar ser feito em cada item de um array. O módulo math faz parte da biblioteca padrão do Python; NumPy é uma dependência opcional para trabalhar com arrays. A escolha depende do formato e da finalidade da entrada, não de uma classificação universal de velocidade.
O número de Euler, normalmente escrito como e, é a base dos logaritmos naturais. O Python o armazena como um valor binário de ponto flutuante; por isso, o formato de impressão pode mudar sua aparência sem alterar o valor usado nos cálculos seguintes.
Leia math.e quando precisar da constante
Importe e de math para ler a constante diretamente. Isso é útil para rótulos, fórmulas ou cálculos que precisam explicitamente do valor da base. A saída é a representação normal de um float do Python no ambiente testado.
from math import e
print(e)
2.718281828459045
Use a formatação apenas no momento da apresentação. Por exemplo, f"{e:.5f}" exibe 2.71828, mas não torna o float armazenado mais preciso. Mantenha o valor sem formatação durante os cálculos e arredonde-o somente quando um leitor, arquivo ou interface precisar de um número específico de casas decimais.
Use math.exp() para um expoente escalar
Para um x escalar, use math.exp(x) para calcular e elevado a x. A operação fica clara e a documentação do Python indica que ela é geralmente mais precisa do que escrever math.e ** x. math.expm1(x) é uma função relacionada para a expressão específica exp(x) - 1; ela evita a perda de precisão significativa quando x está muito próximo de zero.
import math
print(math.exp(3))
print(math.expm1(1e-16))
20.085536923187668
1e-16
A primeira linha calcula e ao cubo. A segunda mostra o pequeno resultado produzido por expm1; subtrair 1 de math.exp(1e-16) pode arredondar e eliminar informações antes que a subtração termine.
math.exp() é limitado pelo intervalo do float do Python. Um expoente finito suficientemente grande gera OverflowError; quando a entrada puder não ter limites, trate essa fronteira em vez de supor que todo expoente terá um resultado representável.
import math
try:
math.exp(1000)
except OverflowError as error:
print(type(error).__name__)
OverflowError
Se um aplicativo espera um overflow, valide o intervalo da entrada, altere a representação matemática ou use uma abordagem numérica adequada ao domínio. Capturar a exceção é útil quando ela faz parte do comportamento previsto do programa, mas não deve ocultar um erro de entrada inesperado.
Use numpy.exp() para valores de um array
numpy.exp() é uma função universal aplicada elemento a elemento. Passe a ela uma coleção semelhante a um array quando cada expoente precisar de um resultado correspondente. Instale o NumPy com a ferramenta de dependências habitual do projeto se ele ainda não estiver disponível; o módulo math da biblioteca padrão não fornece operações de array.
import numpy as np
exponents = np.array([0.0, 1.0, 2.0])
print(np.exp(exponents))
[1. 2.71828183 7.3890561 ]
O array retornado tem o mesmo formato da entrada e contém e elevado a cada elemento. Use math.exp() para um escalar e numpy.exp() quando precisar de semântica de array; o NumPy também pode aceitar um escalar, mas importá-lo apenas para um cálculo escalar é desnecessário.
Escolha o método pela entrada
Use math.e para ler a constante, math.exp() para um expoente escalar e numpy.exp() para cálculos elemento a elemento em arrays. Use math.expm1() quando o resultado necessário for exp(x) - 1 próximo de zero. Em todos os casos, lembre-se de que essas APIs usam valores finitos de ponto flutuante: a formatação afeta a exibição e resultados exponenciais muito grandes podem não caber em um float. Consulte a documentação oficial de math do Python e a documentação de exp do NumPy.