Next: C++ Interface Floats, Previous: C++ Interface Integers, Up: C++ Class Interface [Index]
本節の全てのコンストラクタは,有理数が与えられると,mpq_class::canonicalize関数を呼び出さなくても必ず標準形に変換されます。
mpq_classコンストラクタです。初期値が何らかのクラスの単独の値でも,有理数を表現する整数(mpz_classかC++標準整数)の組でも受け付けます(mpf_classからの変換は明示的に行う必要あり)。但し,long long とlong double は受け付けません。下記のように使用できます。
mpq_class q (99); mpq_class q (1.75); mpq_class q (1, 3);
mpq_t型を利用したmpq_classコンストラクタです。一切の後腐れなく,qの値が新しいmpq_classにコピーされます。
mpq_set_str関数を用いた,文字列を変換して初期値として使うmpq_classコンストラクタです。(see Initializing Rationals)
文字列が正常な有理数でない場合はstd::invalid_argument例外が発生します。operator=演算子でも同様です。
C++11コンパイラを使うと,有理数は123_mpq文法と等価になります。これはmpq_class(123_mpz)と同じです。他の有理数は-1_mpq/2もしくは0xb_mpq/123456_mpzのように構築することができます。
mpq_classクラスを標準形に直します(Rational Number Functions参照)。すべての演算子は標準形のオペランドを要求し,演算結果も標準形にします。
これらの関数はGMP C関数に対するC++クラスインターフェースを提供します。
cmp関数は,全てのクラスと,long long型とlong double型を除く標準C++データ型に対して比較を行います。
mpq_classの分子と分母へのmpz_class参照を返します。読み書きのどちらにも使用できます。返される参照のオブジェクトが変更されると,元のmpq_classsも変更されます。
分子分母を直接操作して標準形から外れた値にしてしまった場合は,mpq_class::canonicalizeを呼び出して以降の演算に影響がないようにして下さい。
mpq_classを構成するmpz_t型の分子と分母への参照を返します。これを使うとmpz_tを引数とするC関数に値を渡せます。これらのmpz_t参照先を変更すると,元のmpq_classも変更されます。
直接操作した結果,標準形から外れた値になった時には,以降の操作に影響がないよう,mpq_class::canonicalize関数を呼び出すようにして下さい。
streamからropをios形式で読み取ります。mpq_t operator>>と同じです (see C++ Formatted Input)。
ropが標準形でない場合はmpq_class::canonicalizeを呼び出しておく必要があります。