自然対数の底 e の計算


関数名
e  自然対数の底eの値を多桁数で算出する
形式
void e(int *data, int keta);
引数
data  (出力)eの値が10進4桁ずつ入った整数の配列
keta  (入力) 小数点以下の桁数の指定
関数値
なし
注意事項

用例(e-test.c
int data[1000];
e(data, 1000);

e の値(小数点以下1万桁)

プログラム(e.c
#define LOG2_10    3.322

void e(int *data, int keta)
{
    int  i, j;
    unsigned k, k2, n, s;
    int  len;
    int  *dap;
    long x;
    
    len = (keta-1) / 4 + 2;
    for (dap = data, j = len; j--; ) *dap++ = 0;

    n = keta * LOG2_10 + 1;
    k = 1; k2 = 2;
    s = 0; j = -1;
    for (i = 1; s <= n; i++) {
        if (i >= k) {
            k = k2;
            k2 <<= 1;
            j++;
        }
        s += j;
    }

    *data = 1;
    while (--i) {
        x = 0;
        for (j = len, dap = data; j--; ) {
            x = x * 10000 + *dap;
            *dap++ = x / i;
            x %= i;
        }
        (*data)++;
    }
}
説明
マクローリン展開 ex = 1 + x/1! + x2/2! + ... + xn/n! + ... に x = 1 とおき、
   e = 1 + 1/1! + 1/2! + 1/3! + ... + 1/n! + ...
の式を利用して計算する。さらに、右辺の第2項目以降の計算では、 計算回数の少ないつぎの式に変形して使う。
   (((...((1/n + 1) 1/(n-1) + 1) 1/(n-2) + 1)...) 1/3 + 1) 1/2 + 1

関連関数