1. 下載程式庫:
https://gmplib.org/download/gmp/gmp-6.1.2.tar.lz
2. 安裝解壓縮程式:
sudo apt-get install lzip
3. 解壓縮:
tar --lzip -xvf gmp-6.1.2.tar.lz
4. 進入程式庫目錄編譯程式, 並安裝到 linux 系統:
cd gmp-6.1.2
./configure
make
sudo make install
# make check
備註: 如果編譯時出現錯誤訊息: : No usable M4 in $PATH , 需要事先安裝巨集 m4:
sudo apt-get install m4
5. 寫一個測試程式:
// testgmp.c
#include "gmp.h"
#include "stdio.h"
int main(){
mpz_t t; // t 是一個容器, 宣告成整數, 使用 mpz_ 的函式運算
mpz_init(t); // 初始化 t
mpz_set_str(t, "123ABCF", 16); // 讓 t = 16 進制整數字串 123ABCF
gmp_printf("t = % Zx\n", t);// 輸出 16 進制整數字串
mpz_clear(t);// 釋放 t 的空間
}
6. 編譯並執行:
gcc testgmp.c -lgmp && ./a.out
7. 整數運算 mpz, 宣告資料型態 mpz_t , 參考: https://gmplib.org/manual/Integer-Functions.html#Integer-Functions
+ 加法 mpz_add(t, op1, op2) 答案 t, 被加數 op1 , 加數 op2, t = op1 + op2
- 減法 mpz_sub(t, op1, op2) 答案 t, 被減數 op1 , 減數 op2, t = op1 - op2
* 乘法 mpz_mul(t, op1, op2) 答案 t, 被乘數 op1 , 乘數 op2, t = op1 * op2
/ 除法 mpz_cdiv_qr(q, r, t, divider) 商數 q, 餘數 r, 被除數 t, 除數 divider
/ 除法 mpz_cdiv_qr(q, t, divider) 商數 q, 被除數 t, 除數 divider, q = t / divider
/ 除法 mpz_cdiv_r(r, t, divider) 餘數 r, 被除數 t, 除數 divider, r = t % divider
% 餘數 mpz_mod(r, t, divider) 餘數 r, 被除數 t, 除數 divider, r = t % divider
除法運算時,針對商及餘數包含小數時, 處理成整數的方式有好幾種方式, 其中 cdiv 前置 c 是 ceil , 而 fdiv 的 f 是 floor, tdiv 的 t 則是 truncate 的意思:
ceil : 大於的(up towards)最接近整數, 例如 ceil(1.2) = 2, ceil(-1.2) = -1
floor: 小於的(down towards)最接近整數, 例如 floor(1.2) = 1, floor(-1.2) = -2
truncate: 無條件捨去成為 0, truncate(1.2) = 1, truncate(-1.2) = -1
8. 分數運算 mpq, 資料型態 mpq_t , 參考: https://gmplib.org/manual/Rational-Number-Functions.html#Rational-Number-Functions
9. 浮點運算 mpf, 資料型態 mpf_t, 參考: https://gmplib.org/manual/Floating_002dpoint-Functions.html#Floating_002dpoint-Functions
沒有留言:
張貼留言