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関数で正確に実行されます。