#include #include #include #include /* The value of e, excluding "2." in double a. */ int e0() { int i; double ta, a = 0, f = 1; for (i = 2; ; i += 1) { ta = 1.0/(f *= i); if (ta < 1e-19) break; a += ta; printf("%d: f %.0f, ta %12g, a %.20f\n", i, f, ta, a); } printf("a 2 + %.20f\n", a); ta = M_E; printf(" (%.20f (double)M_E)\n", ta); printf(" (2.7182818284590452354 (char)M_E)\n\n"); return 0; } /* The value of e, excluding "2." in mpf_t e. */ int e1() { unsigned int i; mpf_t f, de, e; printf("mp_bits_per_limb %d\n", mp_bits_per_limb); printf("old mpf_get_default_prec %u bit\n", (unsigned)mpf_get_default_prec()); mpf_set_default_prec(128); printf("new mpf_get_default_prec %u bit\n", (unsigned)mpf_get_default_prec()); mpf_init_set_ui(f, 1); /* f = 1 */ mpf_init(de); mpf_init(e); /* e = 0 */ for (i = 2; ; i += 1) { mpf_mul_ui(f, f, i); /* f *= i */ mpf_ui_div(de, 1, f); /* de = 1/f */ if (mpf_cmp_d(de, 1e-44) < 0) break; mpf_add(e, e, de); /* e += de */ if (i > 30) gmp_printf("%d: f %Fg, de %Fg\n %.*Ff\n", i, f, de, 40, e); } printf("\n 2.7182 8182 8459 0452 3536 0287 4713 5266 2497 7572 4709 3699 ...\n"); return 0; } /* あちこちで e の値を探してみました。 実は 1000 桁くらいの e の数値が書いてある本を見失いました。 2.7182 8182 8459 0452 3536 0287 4713 5266 2497 7572 4709 3699 9595 7496 6967 6277 24 2.7182 8182 8459 0452 3536 0287 4713 5266 2497 7572 4709 3699 9595 7496 6967 6277 2407 6630 3535 4759 4571 3821 7852 5166 4274 */ int main(int argc, char* argv[]) { e0(); e1(); return 0; }