La fonction a une singularité proche de . Cette singularité peut être levée, cependant: pour , on devrait avoir , car Et donc Cependant, la forme n'est pas seulement non définie en , il est également numériquement instable au voisinage de ce point; afin d'évaluer pour de très petits numériquement, on pourrait utiliser une expansion de Taylor, c'est-à-dire une troncature de la série de puissance susmentionnée.x = 0 x = 1 f ( x ) = 1 e x = ∑ k = 0 x k(ex-1)/x=∑k=1x k - 1
Q : La fonction a- t -elle un nom? En d'autres termes, est-ce un problème courant?
Q : Quelqu'un connaît-il une bibliothèque C / C ++ qui gère bien cette situation, c'est-à-dire utilise l'expansion de Taylor d'un degré approprié près de 0 et l'autre représentation loin de zéro?
Pour répondre à votre première question, non, la fonction n'a pas de nom (du moins pas un nom largement connu).
Comme d'autres l'ont mentionné, la meilleure façon de calculer la fonction est de traiter plusieurs cas particuliers. C'est ainsi que n'importe quelle bibliothèque calculerait la fonction.
double
2e-8
5e-4
expm1(x)/x
.Vous pouvez être plus sophistiqué et spécial avec plus de choses avec la série Taylor tronquée, mais cela n'en vaut probablement pas la peine. En fait, il n'est pas tout à fait clair que le cas 1 doit être traité séparément, car comme l'a souligné k20, l'annulation est sûre. Cependant, le gérer séparément me permettrait de me sentir plus en confiance.
la source
Je me souviens que cette question avait été posée plus tôt sur ce site, et étonnamment la réponse est que vous n'avez besoin que d'une égalité exacte dans un cas spécial à zéro. Les erreurs s'annulent près de zéro. Je n'ai pas le lien.Ouais, cette réponse était complètement fausse. Je ne sais pas pourquoi il a été autant voté, probablement parce qu'il a été énoncé avec tant d'autorité. J'ai trouvé le lien que j'avais en tête. C'était sur le stackexchange mathématique ici , pas sur le stackexchange scicomp. La
expm1
formule d'annulation d'erreur sans erreur est donnée dans la réponse de JM et utilise uneu = exp(x)
transformation.la source
Pour répondre à la première question et proposer une méthode (probablement numériquement inefficace) pour la seconde, notez qu'il s'agit de l'inverse de la fonction génératrice des nombres de Bernoulli .
la source