こんにちは。
C や C++ で多倍長の数値演算を行いたく GMP ライブラリをソースビルドでインストールしてみました。
0. 前提条件
- Linux Mint 17.1(64bit) での作業を想定しているが、 Unix 系 OS なら同様。
- 今回はソースをビルドしてインストールする。
- C だけでなく C++ でも使用可能となるようにする。
- 今回の動作確認は整数に関してのみ行なう。
1. GMP とは
- The GNU Multi Precision Arithmetic Library の略
- 符号付き整数や有理数、浮動小数を任意精度で扱うための算術ライブラリ
- GNU プロジェクトの一部
2. アーカイブの取得&展開
最新の “tar.bz2” ファイルをダウンロードする。("tar.lz", “tar.xz” でもよい。但し、"tar.lz" の展開には lzip
コマンドが必要)
1 2 |
|
3. ビルド&インストール
以下の手順でビルド&インストールする。(C++ に対応するために configure
に --enable-cxx
オプションを付加)
1 2 3 4 5 |
|
/usr/local/lib
にインストールされる。
4. 動作確認用 C, C++ ソースコードの作成
動作確認用の 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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
|
(除算・剰余で使用している cdiv
の c
は ceil の略で小数点以下切り上げ、fdiv
の f
は floor の略で整数部分のみ、tdiv
の t
は truncate の略で小数点以下切り捨てという意味)
上記の他に、素数、最大公約数、最小公倍数、ヤコビ、ルシャンドル、クロネッカー、フィボナッチ、値の比較、論理演算・ビット演算等々、様々な関数が用意されている。
同様に、動作確認用の C++ ソースコードを作成する。C と同様の記述も可能だが 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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
|
5. C, C++ ソースコードのコンパイル
-Wall
は警告も出力するオプション、-O2
は最適化のオプション、-lgmp
は GMP ライブラリを読み込むオプション。
-lgmp
は最後に指定する。
1 2 3 |
|
6. 動作確認
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 |
|
参考サイト
(ドキュメントは GNU MP 6.0.0)
整数以外に有理数や浮動小数についても理解すると、数値計算を行う際に威力を発揮することでしょう。
以上。