このシリーズでGMP(5.1.0)を 使用して円周率を計算しようとしています。
私がしたことは:
#include <stdio.h>
#include <gmp.h>
mpz_t pi;
mpz_t next; // Every number in the serie that comes after 3
int a = 2, b = 3, c = 4; // Divisors. Everytime add 2 to all of them at the end of the loop
int i; // Loop counter
int main (void) {
mpz_init (pi); mpz_init (next);
mpz_set_str (pi, "3", 10);
for (i = 2 ;; ++i) {
printf ("%s\n", mpz_get_str (NULL, 10, pi));
mpz_set_d (next, 4 / (a * b * c));
if (i % 2 == 0)
mpz_add (pi, pi, next);
else
mpz_sub (pi, pi, next);
a += 2; b += 2; c += 2;
}
mpz_clear (next);
mpz_clear (pi);
}
私は64ビットLinuxでコンパイルしています:
gcc -Wall -pedantic -o foo foo.c -lgmp
出力:
3
3
3
and so on
期待される出力:
3
3.1666...
3.1333...
3.1452...
3.1396...
and so on
どんな助けでも大歓迎です。