A função tem singularidade próxima de . Porém, essa singularidade pode ser levantada: para , deve-se ter , pois E, portanto, No entanto, a forma não é apenas definida em , também é numericamente instável nas proximidades desse ponto; a fim de avaliar para muito pequena numericamente, pode-se utilizar uma expansão de Taylor, ou seja, um truncamento da série de energia acima mencionado.x = 0 x = 1 f ( x ) = 1 e x = ∑ k = 0 x k(ex-1)/x=∑k=1x k - 1
P : A função tem um nome? Em outras palavras, isso é um problema comum?
P : Alguém conhece uma biblioteca C / C ++ que lida bem com essa situação, ou seja, usa a expansão de Taylor de um grau apropriado próximo de 0 e a outra representação longe de zero?
Para responder à sua primeira pergunta, não, a função não tem um nome (pelo menos não é amplamente conhecido).
Como outros já mencionaram, a melhor maneira de calcular a função é tratar vários casos especiais. É assim que qualquer biblioteca calcularia a função.
double
2e-8
5e-4
expm1(x)/x
.Você pode ser mais sofisticado e, caso especial, mais coisas com a série Taylor truncada, mas provavelmente não vale a pena. De fato, não está totalmente claro que o caso 1 precise ser tratado separadamente, pois, como k20 apontou, o cancelamento é seguro. No entanto, lidar com isso separadamente me deixaria mais confiante.
fonte
Lembro que essa pergunta foi feita anteriormente neste site e, surpreendentemente, a resposta é que você só precisa igualar a igualdade exata de zero em casos especiais. Os erros são cancelados perto de zero. Eu não tenho o link.Sim, esta resposta estava completamente errada. Não sei ao certo por que foi tão votado, provavelmente porque foi declarado com tanta autoridade. Encontrei o link que tinha em mente. Estava na troca de pilha matemática aqui , não na troca de pilha scicomp. A
expm1
fórmula de cancelamento de erro-free é fornecida na resposta por JM e usa umau = exp(x)
transformação.fonte
Para responder à primeira pergunta e fornecer um método (provavelmente numericamente ineficiente) para a segunda, observe que esse é o inverso da função geradora dos números de Bernoulli .
fonte