Next: , Previous: , Up: Integer Functions   [Index]


5.1 初期化関数

多倍長整数演算を行う関数群は,全ての多倍長整数型のオブジェクトが初期化されているものとして扱います。下記のようにmpz_init関数を使うことで初期化が実行できます。

{
  mpz_t integ;
  mpz_init (integ);
  …
  mpz_add (integ, …);
  …
  mpz_sub (integ, …);

  /* Unless the program is about to exit, do ... */
  mpz_clear (integ);
}

上記の例で分かる通り,一度初期化した多倍長整数オブジェクトには何度でも新しい値を代入することができます。

Function: void mpz_init (mpz_t x)

多倍長整数xを初期化し,値をゼロにセットします。

Function: void mpz_inits (mpz_t x, ...)

NULL文字を終端とするmpz_t型変数のリストを初期化し,全ての変数の値をゼロにセットします。

Function: void mpz_init2 (mpz_t x, mp_bitcnt_t n)

n bit長のxを初期化し,値をゼロにセットします。mpz_init関数やmpz_inits関数で一度初期化した変数に対しては,必要に応じて値を保持するために必要となる領域再確保を,GMP側で自動で行いますので,この関数を呼び出す必要はありません。

この関数によって初期化時に確保されたn bit長の変数xについても,足りなくなれば値保持に必要なだけ自動的に領域再確保を行いますが,最大長があらかじめ分かっている場合は領域再確保を避けることができます。

GMPでは演算準備段階で,1リム以上の領域を確保することがあります。これを避けたいのであれば,xに対して,nに1リム(mp_limb_t)分のビット数を加えておく必要があります。

Function: void mpz_clear (mpz_t x)

xが確保していた領域を解放します。どんな手段で確保されたmpz_t型変数であっても利用可能です。

Function: void mpz_clears (mpz_t x, ...)

NULL文字を終端とするmpz_t型変数のリストが保持する領域全てを解放します。

Function: void mpz_realloc2 (mpz_t x, mp_bitcnt_t n)

変数x用にn bit分のメモリ領域を再確保します。xが保持する値が代入できる長さであればそのまま保持されますが,足りない時にはゼロがセットされます。

GMPは必要に応じて自動的にメモリ領域の再確保を行いますので,この関数は基本的に不要なものです。繰り返し再領域確保が行われるようであったり,不要なメモリ領域をヒープに戻したいような状況でのみ有用な関数です。