@Lin--
2019-09-11T01:57:17.000000Z
字数 2096
阅读 496
ComSec
练习使用C++和GMP进行大整数和高精度浮点数运算。
/** File : GmpWork_1.cpp* Author : Hongpei Lin* Date : 20190910** Purpose : using "GMP" to compute Large Int and High precision Float*/#include <iostream>#include "gmpxx.h"using namespace std;int main( ){//Large Intmpz_t a, b, add, sub, mul, cdiv_q, cdiv_r, fdiv_q, fdiv_r, pow;//define Large Int//initialize variable,decimalmpz_init_set_str(a,"1234568799876543210123456789",10);mpz_init_set_str(b,"98765432101245789",10);mpz_inits(add, sub, mul, cdiv_q, cdiv_r, fdiv_q, fdiv_r, pow, NULL);gmp_printf("a=%Zd,b=%Zd\n", a, b);//computempz_add(add, a, b);//add functiongmp_printf("Large Int add result %Zd\n", add);mpz_sub(sub, a, b);//sub functiongmp_printf("Large Int sub result %Zd\n", sub);mpz_mul(mul, a, b);//mul functiongmp_printf("Large Int mul result %Zd\n", mul);mpz_cdiv_q(cdiv_q, a, b);//div function,ceilgmp_printf("Large Int div(ceil) result %Zd\n", cdiv_q);mpz_cdiv_r(cdiv_r, a, b);//mod function,ceilgmp_printf("Large Int div(ceil) remainder %Zd\n", cdiv_r);mpz_fdiv_q(fdiv_q, a, b);//div function,floorgmp_printf("Large Int div(floor) result %Zd\n", fdiv_q);mpz_fdiv_q(fdiv_r, a, b);//mod function,floorgmp_printf("Large Int div(floor) remainder %Zd\n", fdiv_r);mpz_pow_ui(pow, a, 3);//power functiongmp_printf("Large Int pow result %Zd\n", pow);//free the variablempz_clears(pow, fdiv_r, fdiv_q, cdiv_r, cdiv_q, mul, sub, add, a, b, NULL);gmp_printf("\n");//High precision Floatmpf_t d, e, f_add, f_sub, f_mul, f_div, f_sqrt;int n = 30;//initialize variablempf_init_set_d(d, 3.141592653589793238462643383279);mpf_init_set_d(e, 0.12356454134546482134564445);mpf_inits(f_add, f_sub, f_mul, f_div, f_sqrt, NULL);gmp_printf("d=%.*Ff,e=%.*Ff\n", n, d, n, e);//computempf_add(f_add, d, e);//add functiongmp_printf("High precision Float Add result %.*Ff\n", n, f_add);mpf_sub(f_sub, d, e);//sub functiongmp_printf("High precision Float Sub result %.*Ff\n", n, f_sub);mpf_mul(f_mul, d, e);//mul functiongmp_printf("High precision Float Mul result %.*Ff\n", n, f_mul);mpf_div(f_div, d, e);//div functiongmp_printf("High precision Float Div result %.*Ff\n", n, f_div);mpf_sqrt(f_sqrt, d);//div functiongmp_printf("High precision Float Sqrt result %.*Ff\n", n, f_sqrt);mpf_clears(f_sqrt, f_div, f_mul, f_sub, f_add, e, d, NULL);system("pause");return 0;}