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
を呼び出しておく必要があります。