2

libgmp を使用して簡単なプログラムを作成しています。すべての gmp 整数を gmp_printf できるので、これらが正しく初期化され、割り当てられていることがわかります。この問題は、単純な if-else 条件を試したときに発生します。

mpz_t n;
mpz_t c;
mpz_t m;

mpz_init(n);
mpz_init(c);
mpz_init(m); 

mpz_set_str(c, "2", 10);
mpz_set_str(n, "2038074744", 10);

mpz_mod(m, n, c);

gmp_printf("\n%Zd\n%Zd\n%Zd\n", n, c, m);

if(m == 0)
{
printf("number is even\n");
}
else
{
printf("number is odd\n");
}

実際の数値は 0 として出力されますが、else printf は常に表示されます。

2038074744
2
0
number is odd

これを機能させる方法はありますか?

4

3 に答える 3

3

(大まかに言えば)ポインターであるためm、直接比較することはできません。mGMP に含まれる比較関数を使用する必要があります。http://gmplib.org/manual/Integer-Comparisons.html#Integer-Comparisonsを参照してください

于 2012-09-05T19:04:43.847 に答える