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)++;
}
}