Cでeを求める

| コメント(0) | トラックバック(0) |

まず、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言語の実数型の精度にすぐに到達するのがよくわかります。(収束が早い)

トラックバック(0)

トラックバックURL: https://www.letstryit.net/mt/mt-tb.cgi/54

コメントする

アーカイブ

カウンタ

Total
Today
Yesterday

IPv6 Ready

Powered by Movable Type 7.0

このブログ記事について

このページは、enjoypcが2009年4月15日 18:01に書いたブログ記事です。

ひとつ前のブログ記事は「C言語のmain関数の戻り値について」です。

次のブログ記事は「Linuxを簡単に使うには どうする方法が一番? その1」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ