Previous: , Up: Formatted Output   [Index]


10.3 C++ 書式指定出力

本節に示した関数はlibgmpxx (see Headers and Libraries)が提供しているもので,C++サポート(see Build Options)を有効にしている時のみ使用可能です。型宣言は <gmp.h>で行っています。

Function: ostream& operator<< (ostream& stream, const mpz_t op)

iosの書式指定に従ってopstreamに出力します。出力後はios::widthはゼロにリセットされます。この辺の挙動は標準の ostream operator<<ルーチンと同じです。

16進でも8進でも10進でも,opは符号付きで表示されます。標準operator<<ルーチンの動作とは異なり,2の補数表示は使いません。

Function: ostream& operator<< (ostream& stream, const mpq_t op)

iosの書式指定に従ってopstreamに出力します。出力後はios::widthはゼロにリセットされます。この辺の挙動は標準の ostream operator<<ルーチンと同じです。

出力は‘5/9’のように分数表現となりますが,分母が1の時は‘123’のように単なる整数として表示します。

16進でも8進でも10進でも,opは符号付きで表示されます。 ios::showbaseがセットされている時には,分子と分母(の表示が必要な時には)にそれぞ適用されます

Function: ostream& operator<< (ostream& stream, const mpf_t op)

16進でも8進でも10進でも,opは符号付きで表示されます。 出力後はios::widthはゼロにリセットされます。この辺の挙動は標準の ostream operator<<ルーチンと同じです。

小数点は標準の operator<<演算子と同じように表示されます。streamの表示はstd::localeに従って行われるのが近年では普通です。

double型に対する標準のoperator<< とは異なり,16進でも8進でも出力できます。仮数部は16進か8進,指数は10進になります。16進の場合は仮数部と指数部の間の文字(デリミタ)が‘@’になります。これは mpf_out_str関数と同じ仕様です。

ios::showbaseがサポートされており,仮数部の基数がセットされます。例えば16進は‘0x1.8’や ‘0x0.8’,8進は‘01.4’ or ‘00.4’のように出力されます。8進表記が少し奇妙ですが,10進表現と差異をつけるためにこのような表記を行っています。

以上のオペレーターは,GMPデータ型を通常のC++の入出力方法で表示できるようにするものです。下記のように使います。

mpz_t  z;
int    n;
...
cout << "iteration " << n << " value " << z << "\n";

当たり前のことですが,ostream出力 (と istream入力も, see C++ Formatted Input)は,GMPデータ型に対してこれらの演算子がオーバーロードされている時のみ有効で,例えば,+mpz_t型に対して適用したりすると,その結果は予測不能なものになります。オーバーロードしてあるクラスについてはC++ Class Interfaceを参照して下さい。