Funkcja ma osobliwość zbliżoną do x = 0 . Osobliwość tę można jednak znieść: dla x = 1 należy mieć f ( x ) = 1 , ponieważ e x = ∑ k = 0 x k a zatem (ex-1)/x=∑k=1x k - 1
P : Czy funkcja ma nazwę? Innymi słowy, czy jest to powszechny problem?
P : Czy ktoś wie o bibliotece C / C ++, która ładnie radzi sobie z tą sytuacją, tj. Używa rozszerzenia Taylora o odpowiednim stopniu w pobliżu 0 i innej reprezentacji od zera?
Aby odpowiedzieć na twoje pierwsze pytanie, nie, funkcja nie ma nazwy (a przynajmniej takiej, która jest powszechnie znana).
Jak wspomnieli inni, najlepszym sposobem na obliczenie tej funkcji jest leczenie kilku szczególnych przypadków. W ten sposób każda biblioteka obliczy tę funkcję.
double
2e-8
5e-4
expm1(x)/x
.Możesz być bardziej wyrafinowany i specjalny przypadek więcej rzeczy ze ściętą serią Taylor, ale prawdopodobnie nie jest tego wart. W rzeczywistości nie jest do końca jasne, że przypadek 1 należy rozpatrywać osobno, ponieważ, jak wskazano w k20, anulowanie jest bezpieczne. Jednak osobne obchodzenie się z nim pozwoliłoby mi być bardziej pewnym siebie.
źródło
Pamiętam to pytanie, które zostało zadane wcześniej na tej stronie, i zaskakująco odpowiedź brzmi, że potrzebujesz tylko równości równej zeru w specjalnym przypadku. Błędy anulują się w pobliżu zera. Nie mam linkuTak, ta odpowiedź była całkowicie błędna. Nie jestem pewien, dlaczego został tak wysoko oceniony, prawdopodobnie dlatego, że został napisany tak autorytatywnie. Znalazłem łącze, które miałem na myśli. Było to tutaj wymiana stosu matematyki , a nie na wymianie stosu Scicomp.
expm1
-Darmowy formuła anulowanie błędu podano w odpowiedzi JM i wykorzystujeu = exp(x)
transformację.źródło
Aby odpowiedzieć na pierwsze pytanie i podać (prawdopodobnie liczbowo nieefektywną) metodę drugiego, zauważ, że jest to odwrotność funkcji generującej liczby Bernoulliego .
źródło