まず、eとは、自然対数の底のことで、ネイピア数とも言います。
数値としては、2.718281828・・・となり、循環しない小数です。
定義
e = \lim_{n \to \infty} (1 + \frac{1}{n})^n
(見にくいんで後で直します。)
コンピュータで計算するときには、これを使っても良いんですが、通常は和の形に直します。
精度を上げるために、nを大きくするのですが、この式の場合始めから計算しないといけません。それは、かなり手間がかかります。なので、足し算の形にして、無限に足すことが出来るようにすることで、以前の結果を使用することが出来、効率が上がります。
eの場合は、二項定理を使用して展開し、nで割ることにより、実現できます。証明は別のサイトを参照してください。
e = 1 + 1 / 1! + 1 / 2! + 1 / 3! + 1 / 4! + ... + 1 / n!
n は無限大で、非常に大きい数です。! は、階乗です。
これを参考にしてプログラムを組みます。
#include <stdio.h>
int main(void) {
int i;/* e: 自然対数の底, a: 階乗の部分 */
double e, a;/* 初期値を代入 */
e = 1.0;
a = 1.0;for (i = 1; i < 10; i++) {
/* どんどん割っていく */
a /= i;/* どんどん足していく */
e += a;
}printf("e = %lf\n", e);
return 0;
}
実行結果:
e = 2.718282
あんまり面白くないですね(^_^;)
ループの中に、出力をつけてどんな風に収束していくのかを見ると良いと思います。C言語の実数型の精度にすぐに到達するのがよくわかります。(収束が早い)
コメントする