e 自然対数の底eの値を多桁数で算出する
void e(int *data, int keta);
data (出力)eの値が10進4桁ずつ入った整数の配列 keta (入力) 小数点以下の桁数の指定
なし
#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)++; } }