exp(x)=∑n=0∞xnn!=1+x+12x2+…
|x|≪1exp(x)≈1+xexp(x)−1|x|≪1
Bu kolayca python ile gösterilebilir:
>>> from math import (exp, expm1)
>>> x = 1e-8
>>> exp(x) - 1
9.99999993922529e-09
>>> expm1(x)
1.0000000050000001e-08
>>> x = 1e-22
>>> exp(x) - 1
0.0
>>> expm1(x)
1e-22
exp(10−8)−1exp(10−22)−1=0.000000010000000050000000166666667083333334166666668…=0.000000000000000000000100000000000000000000005000000…
Genel olarak "doğru" bir uygulama en fazla 1ULP'dan (yani son yerin bir birimi) uygulanmasından ibarettir expve expm1doğru olmalıdır. Bununla birlikte, bu doğruluğa ulaşmak "yavaş" kodla sonuçlandığından, bazen hızlı, daha az doğru bir uygulama mevcuttur. Örneğin, CUDA’da biz expfve hızlı expm1fnerede duruyoruz f. Göre CUDA C, app kılavuzu programlama. Dexpf 2ULP bir hata vardır.
Birkaç ULPS sırasındaki hataları umursamıyorsanız, genellikle üstel fonksiyonun farklı uygulamaları eşdeğerdir, ancak böceklerin bir yere gizlenebileceğine dikkat edin ... ( Pentium FDIV hatasını hatırlayın ?)
expm1exp(x)−1xxexpm1
>>> exp(200)-1 == exp(200) == expm1(200)
True
1exp(200)
loglog1plog(1+x)≈x|x|≪1
log1p(özellikle nasıl uygulandığı, yani tahmin etmemize gerek yoktur).