Next: C++ Interface Rationals, Previous: C++ Interface General, Up: C++ Class Interface [Index]
mpz_class
のコンストラクタです。long long
とlong double
を除くすべてのC++の標準データ型と,GMP C++クラスが利用可能です。ただし,mpq_class
とmpf_class
からの変換は明示的に行う必要があります。Cデータ型に変換する際には,例えばdouble
ならmpz_set_d
関数,というように対応するCデータ型への関数を使って下さい(see Assigning Integers参照)。
mpz_t
型を利用したmpz_class
コンストラクタです。一切の後腐れなく,zの値は新しいmpz_class
にコピーされます。
mpz_set_str
関数を用いて文字列からの変換を行うmpz_class
コンストラクタです。(see Assigning Integers)
文字列が正常な整数ではない場合,std::invalid_argument
例外が発生します。operator=
演算子でも同様です。
C++11コンパイラを使うと,整数は
123_mpz
文法を用いて生成できます。これはmpz_class("123")
と同じです。
切り捨て方向に丸める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());
これらの関数は対応するGMPのCルーチンに対するC++クラスラッパーです。
cmp
関数は他のクラスや,long long
型とlong double
型を除く標準C++データ型に対する比較が行えます。
オーバーロードされた演算子を使うと,mpz_class
とdouble
の組み合わせは完ぺきに実行できますが,double
型が正確な整数で表現できない場合,どこかで丸めが発生する可能性があり,将来のバージョンでは計算結果が変わるかもしれません。
mpz_class
とdouble
間の変換は,C関数mpz_get_d
とmpz_set_d
で実行されます。比較についてはmpz_cmp_d
関数で正確に実行されます。