三角関数等はかなりいい精度が取れるのですが、指数関数では誤差が発生し精度があまりよくありません。
一応べき級数と極限の2つの場合で計算しているのですが、極限での実装は流石に避けたいです。
これ以上どう精度に対してどう対策をすればいいか、また、他の計算方法があれば教えてください。
#include <cmath>
#include <stdio.h>
//打切り誤差
#define MATHLIB_EPSILON 1e-15
namespace Math {
double exp1(double x) {
double x1 = 1.0, x2 = 1.0, buf = 0;
for (int i = 1;; ++i) {
buf = x2;
x1 = x1*(x / i);
x2 += x1;
if (std::abs(x2 - buf) < MATHLIB_EPSILON)
break;
}
return x2;
}
double exp2(double x) {
return std::pow(1.0 + x / 10000000, 10000000);
}
}
void main() {
for (int i = -20; i < 21; ++i) {
printf("%4d:%25.15lf\n %25.15lf\n", i, Math::exp1(i), Math::exp2(i));
printf(" %25.15lf\n", std::exp(i));
}
getchar();
return;
}