質問

GMP で宣言された変数のサイズを知るにはどうすればよいですか??または、GMP で整数のサイズを決定するにはどうすればよいですか?

mpz_random(temp,1);

マニュアルでは、この関数は 1limb (= 私のコンプでは 32 ビット) サイズを「temp」に割り当てると指定されています。しかし、9桁の数字しかありません。したがって、32ビットサイズの数値は9桁の数値のみを保持するとは思いません。

それで、GMPの整数変数のサイズを知るのを手伝ってください。

よろしくお願いします。

役に立ちましたか?

解決

32ビット(4バイト)は、実際には9進数字

を格納するために使用することができます
2^32 = 4 294 967 296
ここで

これだけ9フル桁(それは完全ではないので10は、区間0から4までである)。

あなたは対数を経由して、これを再計算することができます:

log_10(2^32)
のGoogleアカウント尋ねてみましょう。

log base 10(2^32) = 9.63295986

すべてが正しいです。

他のヒント

mpz_sizeinbase(num, 2) '使用' ビットにあなたのサイズが得られます。

手足の数はデバッガで確認できます。GMP 整数には、変数の現在の値を保持するために使用されるリムの数である内部フィールド「_mp_size」があります (0 は特殊なケースです:_mp_size = 0 で表されます)。Visual C++ で実行した例を次に示します (私の記事を参照してください) MPIR を使用して Windows に GMP をインストールして実行する方法):

mpz_set_ui(temp, 1073741824); //2^30, (_mp_size = 1)
mpz_mul(temp,temp,temp); //2^60 (_mp_size = 2)
mpz_mul(temp,temp,temp); //2^120 (_mp_size = 4)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top