1

GMPライブラリにGMP変数のbitLengthを与える関数はありますか?

mpz_t temp;
mpz_init(temp);
mpz_set_ui(temp,356678789);

次に、温度のビット長を見つける方法は?

4

2 に答える 2

0

GMP には、それを行うライブラリ関数があります。

size_t mpz_sizeinbase (mpz_t OP, int BASE)

mpz_sizeinbase(temp,2);を表すのに必要なビット数は次のabs(temp)とおりです。

指定された BASE の桁数で測定された OP のサイズを返します。BASE は 2 ~ 62 の範囲で指定できます。OP の符号は無視され、絶対値のみが使用されます。結果は、正確または 1 が大きすぎます。BASE が 2 の累乗の場合、結果は常に正確です。OP がゼロの場合、戻り値は常に 1 です。

于 2012-08-01T11:23:56.137 に答える
0

もっと良い方法があるかもしれませんが、ドキュメントを読んだ後、次の方法を思いつきました。

mp_bitcnt_t msb(mpz_t& m) {
  mpz_t n = m.get_moz_t();
  mp_bitcnt_t remaining = mpz_popcount(n), last = -1;
  while (remaining) {
    --remaining;
    last = mpz_scan1(n, last + 1);
  }
  return last;
}
于 2012-08-01T10:45:49.447 に答える