スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Windows XPにおけるGMPのセットアップ作業のメモ 2012年3月版

Windows XP における GMP のセットアップ作業の手順を自分のためにメモ。

GMP (GNU Multiple Precision Arithmetic Library) とは、C 言語において多倍長計算を行うためのライブラリです。

MinGWの入手とインストール

MinGW (+MSYS) がインストールされた Windows XP 環境において、GMP を利用することができます。Windows XP における MinGW (+MSYS) のセットアップ手順については以下の記事をお読みください:

Windows XPにおけるC言語およびC++のセットアップ作業のメモ 2012年3月版

インストーラを利用すると、デフォルトで C:\MinGW にインストールされます。以下、それを前提に話を進めます。

GMP の入手とインストール

GMP の公式サイト:

The GNU MP Bignum Library

から、gmp-5.0.4.tar.bz2 をダウンロードします。これを例えば C:\temp の中に置きます (temp フォルダは新規作成します)。

コマンドプロンプトを起動し、以下のようにコマンドを入力します:

> cd c:\temp

> bzip2 -d gmp-5.0.4.tar.bz2

> tar xf gmp-5.0.4.tar

> cd gmp-5.0.4

> bash ./configure -prefix=/mingw/ --enable-cxx
(出力内容は省略)
(処理の終了まで時間がかかります)

> make
(出力内容は省略)
(処理の終了まで時間がかかります)

> make install
(出力内容は省略)

サンプルプログラム (C 言語)

/* arithmetic_op.c */

#include <stdio.h>
#include <gmp.h>

#define BASE 10  /* 基数(10進数) */

int main(void)
{
  mpz_t a, b, c[5];
  const char* op[] = {"+", "-", "*", "/", "%"};
  int i;

  /* 変数の初期化 */
  mpz_inits(a, b, NULL);  /* 最後の引数はNULL */
  for(i = 0; i < 5; i++) {
    mpz_init(c[i]);
  }

  /* 数値の変数への代入 */
  mpz_set_str(a, "82148086513282306647", BASE);
  mpz_set_str(b, "14159265358979323846", BASE);

  mpz_add(c[0], a, b);  /* 和の計算 */
  mpz_sub(c[1], a, b);  /* 差の計算 */
  mpz_mul(c[2], a, b);  /* 積の計算 */
  mpz_div(c[3], a, b);  /* 商の計算 */
  mpz_mod(c[4], a, b);  /* 剰余の計算 */

  /* 計算結果の出力 */
  for (i = 0; i < 5; i++) {
    mpz_out_str(stdout, BASE, a);
    printf(" %s ", op[i]);
    mpz_out_str(stdout, BASE, b);
    printf("\n = ");
    mpz_out_str(stdout, BASE, c[i]); 
    printf("\n");
  }

  /* 解放 */
  mpz_clears(a, b, NULL);  /* 最後の引数はNULL */
  for(i = 0; i < 5; i++) {
    mpz_clear(c[i]);
  }

  return 0;
}

コンパイル方法

コマンドプロンプトを起動し、以下のコマンドを実行:

> gcc arithmetic_op.c -o arithmetic_op -l gmp

すると、実行ファイル(arithmetic_op.exe)ができあがります。それを実行すると、以下のようになります:

> arithmetic_op
82148086513282306647 + 14159265358979323846
 = 96307351872261630493
82148086513282306647 - 14159265358979323846
 = 67988821154302982801
82148086513282306647 * 14159265358979323846
 = 1163156555673954751406928593255291404362
82148086513282306647 / 14159265358979323846
 = 5
82148086513282306647 % 14159265358979323846
 = 11351759718385687417

サンプルプログラム (C++)

/* arithmetic_op.cpp */

#include <iostream>
#include <gmpxx.h>

using namespace std;

int main()
{
  mpz_class a, b, c[5];
  const char* op[] = {"+", "-", "*", "/", "%"};

  /* 数値の変数への代入 */
  a = "82148086513282306647";
  b = "14159265358979323846";
  c[0] = a + b;
  c[1] = a - b;
  c[2] = a * b;
  c[3] = a / b;
  c[4] = a % b;

  /* 計算結果の出力 */
  for ( int i = 0; i < 5; i++ ) {
    cout << a << " " << op[i]  << " " << b << endl
         << " = " << c[i] << endl;
  }

  return 0;
}

コマンドプロンプトを起動し、以下のコマンドを実行:

> g++ arithmetic_op.cpp -o arithmetic_op -l gmpxx -l gmp

すると、実行ファイル (arithmetic_op.exe) ができあがります。それを実行すると、以下のようになります:

> arithmetic_op
82148086513282306647 + 14159265358979323846
 = 96307351872261630493
82148086513282306647 - 14159265358979323846
 = 67988821154302982801
82148086513282306647 * 14159265358979323846
 = 1163156555673954751406928593255291404362
82148086513282306647 / 14159265358979323846
 = 5
82148086513282306647 % 14159265358979323846
 = 11351759718385687417

参考URL

GNU MP Manual

古い記事

Windows XPにおけるGMPのセットアップ作業のメモ

【theme : プログラミング
【genre : コンピュータ

プロフィール

よしいず

Author:よしいず
MATHEMATICS.PDFというウェブサイトを運営しています。

管理の都合上、トラックバックとコメントはオフにしてあります。ブログ経験者なら分かっていただけると思いますが、スパム(アダルトやその他の宣伝)ばかりなのが現実です。

リンクは自由です。当サイトの記事に対する間違いの指摘・意見・感想などを述べた記事からのリンクは歓迎です。ただし、ブログ記事アップ直後はミスが多く、頻繁に修正します。場合によっては削除する可能性もあります。その際、何も断りもなく修正・削除しますがご了承ください。内容を参考にする場合には投稿後一週間ほど様子を見てからにしてください(笑)。

記事の間違いを指摘するときは、その具体的箇所、理由(仕様に反するなど)・根拠(参考にした文献など)、代替案(同じ結果を得るための正しいやり方)も教えてください。そうしないと、(指摘される側および第三者はその時点では無知の状態なので、)どこが間違いなのか分かりませんし、本当に間違っているのかどうかが判断・検証できません。実際、間違いだと指摘されたことが結局は正しかったというケースもありますので。

このブログのタイトル一覧

リンク
月別アーカイブ
カテゴリ
最新記事
検索フォーム
RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。