Next: , Previous: , Up: C++ Class Interface   [Index]


12.2 C++整数クラス

Function: mpz_class::mpz_class (type n)

mpz_classのコンストラクタです。long longlong doubleを除くすべてのC++の標準データ型と,GMP C++クラスが利用可能です。ただし,mpq_classmpf_classからの変換は明示的に行う必要があります。Cデータ型に変換する際には,例えばdoubleならmpz_set_d関数,というように対応するCデータ型への関数を使って下さい(see Assigning Integers参照)。

Function: explicit mpz_class::mpz_class (const mpz_t z)

mpz_t型を利用したmpz_classコンストラクタです。一切の後腐れなく,zの値は新しいmpz_classにコピーされます。

Function: explicit mpz_class::mpz_class (const char *s, int base = 0)
Function: explicit mpz_class::mpz_class (const string& s, int base = 0)

mpz_set_str関数を用いて文字列からの変換を行うmpz_classコンストラクタです。(see Assigning Integers)

文字列が正常な整数ではない場合,std::invalid_argument例外が発生します。operator=演算子でも同様です。

Function: mpz_class operator"" _mpz (const char *str)

C++11コンパイラを使うと,整数は 123_mpz文法を用いて生成できます。これはmpz_class("123")と同じです。

Function: mpz_class operator/ (mpz_class a, mpz_class d)
Function: mpz_class operator% (mpz_class a, mpz_class d)

切り捨て方向に丸めるmpz_classの除算を行います。これは mpz_tdiv_q関数とmpz_tdiv_r関数で行います(see Integer Division)。 C99の/演算子と%演算子に相当する演算です。

mpz_fdiv…関数,もしくはmpz_cdiv…関数は必要に応じていつでも呼びだせます。例えば下記のように使います。

mpz_class q, a, d;
...
mpz_fdiv_q (q.get_mpz_t(), a.get_mpz_t(), d.get_mpz_t());
Function: mpz_class abs (mpz_class op)
Function: int cmp (mpz_class op1, type op2)
Function: int cmp (type op1, mpz_class op2)
Function: bool mpz_class::fits_sint_p (void)
Function: bool mpz_class::fits_slong_p (void)
Function: bool mpz_class::fits_sshort_p (void)
Function: bool mpz_class::fits_uint_p (void)
Function: bool mpz_class::fits_ulong_p (void)
Function: bool mpz_class::fits_ushort_p (void)
Function: double mpz_class::get_d (void)
Function: long mpz_class::get_si (void)
Function: string mpz_class::get_str (int base = 10)
Function: unsigned long mpz_class::get_ui (void)
Function: int mpz_class::set_str (const char *str, int base)
Function: int mpz_class::set_str (const string& str, int base)
Function: int sgn (mpz_class op)
Function: mpz_class sqrt (mpz_class op)
Function: mpz_class gcd (mpz_class op1, mpz_class op2)
Function: mpz_class lcm (mpz_class op1, mpz_class op2)
Function: void mpz_class::swap (mpz_class& op)
Function: void swap (mpz_class& op1, mpz_class& op2)

これらの関数は対応するGMPのCルーチンに対するC++クラスラッパーです。

cmp関数は他のクラスや,long long型とlong double型を除く標準C++データ型に対する比較が行えます。


オーバーロードされた演算子を使うと,mpz_classdoubleの組み合わせは完ぺきに実行できますが,double型が正確な整数で表現できない場合,どこかで丸めが発生する可能性があり,将来のバージョンでは計算結果が変わるかもしれません。

mpz_classdouble間の変換は,C関数mpz_get_dmpz_set_dで実行されます。比較についてはmpz_cmp_d関数で正確に実行されます。