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.