mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

MPFR - ソースビルドでインストール (on Linux Mint)!

[ プログラミング ] [ C言語 ]

こんにちは。

C や C++ で多倍長浮動小数点演算を行いたく MPFR ライブラリをソースビルドでインストールしてみました。

0. 前提条件

  • Linux Mint 17.1(64bit) での作業を想定しているが、 Unix 系 OS なら同様。

1. MPFR とは

  • The GNU Multiple Precision Floating-Point Reliably の略
  • 多倍長浮動小数点を高精度で扱うためのライブラリ
  • GNU プロジェクトの一部

2. アーカイブの取得&展開

最新の “tar.gz” ファイルをダウンロード後に展開。(tar.xz”, “tar.bz2”, “zip” でもよい)

1
2
$ wget http://www.mpfr.org/mpfr-current/mpfr-3.1.2.tar.gz
$ tar zxvf mpfr-3.1.2.tar.gz

3. ビルド&インストール

1
2
3
4
5
$ cd mpfr-3.1.2
$ ./configure
$ make
$ make check
$ sudo make install

/usr/local/lib にインストールされる。

4. 動作確認用 C ソースコードの作成

動作確認用の C ソースコードを作成する。
(以下は、参考サイトの Sample コードで、 を 200 bit の精度で計算するもの)

text_mpfr.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/*************************************************************
 * MPFR(The GNU Multi Presicion Floating-Point Reliably Library) Test by C.
 ************************************************************/
#include <stdio.h>

#include <gmp.h>
#include <mpfr.h>

int main (void)
{
    unsigned int i;
    mpfr_t s, t, u;

    mpfr_init2 (t, 200);
    mpfr_set_d (t, 1.0, MPFR_RNDD);
    mpfr_init2 (s, 200);
    mpfr_set_d (s, 1.0, MPFR_RNDD);
    mpfr_init2 (u, 200);
    for (i = 1; i <= 100; i++) {
        mpfr_mul_ui (t, t, i, MPFR_RNDU);
        mpfr_set_d (u, 1.0, MPFR_RNDD);
        mpfr_div (u, u, t, MPFR_RNDD);
        mpfr_add (s, s, u, MPFR_RNDD);
    }
    printf ("Sum is ");
    mpfr_out_str (stdout, 10, 0, s, MPFR_RNDD);
    putchar ('\n');
    mpfr_clear (s);
    mpfr_clear (t);
    mpfr_clear (u);
    return 0;
}

5. C ソースコードのコンパイル

-Wall は警告も出力するオプション、-O2 は最適化のオプション、-lmpfr, -lgmp は MPFR, GMP ライブラリを読み込むオプション。

1
$ gcc -Wall -O2 -o test_mpfr_c test_mpfr.c -lmpfr -lgmp

6. 動作確認

1
2
$ ./test_mpfr_c
Sum is 2.7182818284590452353602874713526624977572470936999595749669131

参考サイト


以上。

Comments