GMP利用の流れ

1) 値を保持するオブジェクトの宣言
 値を保持するオブジェクトには mpz_t(整数型)mpq_t(有理数型)mpf_t(浮動小数点数型)の3つがあり,必要に応じてそれらの型のオブジェクトを宣言します.
 
例.有理数型のオブジェクトの宣言: mpq_t a, b, c;
 
2) オブジェクトの初期化
 GMPのオブジェクトは計算に使用する前(値を格納する前)に初期化処理をする必要があります.
 
例.有理数型オブジェクトの初期化:
 mpq_init(a);
 mpq_init(b);
 mpq_init(c);

同様に mpz_init, mpf_init 関数があります.
 
3) オブジェクトへの値の格納(代入)
■ mpz_t(整数)オブジェクト x への値の格納
 mpz_set_ui( mpz_t x, unsigned long v ) : 符号なしlong型のvを代入
 mpz_set_si( mpz_t x, long v ) : long型のvを代入
 mpz_set_str( mpz_t x, const char *v, inv base ) :
   base進法の基数で表現された文字列としての整数vを解釈して代入
 
■ mpq_t(有理数)オブジェクト x への値の格納
 mpq_set_ui( mpz_t x, unsigned long v1, unsigned long v2 ) :
   符号なしlong型で表現された有理数 v1/v2 を代入
 mpq_set_si( mpz_t x, long v1, unsigned long v2 ) :
   同じく v1/v2 を代入
 mpq_set_d( mpz_t x, double v ) : double型の v を代入
 mpq_set_str( mpz_t x, const char *v, inv base ) :
   base進法の基数で表現された文字列としての有理数vを解釈して代入

同様に mpf_t 型のオブジェクトにも値を格納する関数があります.
 
4) 計算処理
■ 加算: r = v1 + v2
 mpz_add(r,v1,v2), mpq_add(r,v1,v2), mpf_add(r,v1,v2)
■ 減算: r = v1 – v2
 mpz_sub(r,v1,v2), mpq_sub(r,v1,v2), mpf_sub(r,v1,v2)
■ 乗算: r = v1 * v2
 mpz_mul(r,v1,v2), mpq_mul(r,v1,v2), mpf_mul(r,v1,v2)
■ 除算: r = v1 / v2
 mpz_div(r,v1,v2), mpq_div(r,v1,v2), mpf_div(r,v1,v2)
その他…
 
5) 出力(変換)
■ 文字列への変換
例.mpz_t(整数型)のオブジェクト x を char *s に変換する
 mpz_get_str( char *s, int base, mpz_t x )
同様に mpq_t, mpf_t 型のオブジェクトを文字列に変換することができます.
 
その他にも,long, unsigned long, double 型に変換する関数もあります.

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)