|
发表于 2024-4-7 07:09:46
|
显示全部楼层
参考文献$2$:
————————————————————
急问:gmp高精度库浮点数使用问题 [问题点数:40分]
请问,gmp中的gmf_t高精度浮点数计算有问题?
比如:3.14/5.789
gmp结果:0.5424080152012437381240283295906
windows自带计算器和Java中的大数处理函数计算出来是:0.5424080152012437381240283295906
gmp从小数点后17位就不准了
这是怎么回事,gmp不是号称最好的高精度库吗?怎么一个浮点数除都不准啊!
#####
是我贴错了
请问,gmp中的gmf_t高精度浮点数计算有问题
比如:3.14/5.789
gmp结果:0.5424080152012437875651563769429
windows自带计算器和Java中的大数处理函数计算出来是:0.5424080152012437381240283295906
gmp从小数点后17位就不准了
这是怎么回事,gmp不是号称最好的高精度库吗?怎么一个浮点数除都不准啊!
是否是使用mpf_set_d去对gmf_t赋值的?这个会影响两个输入数据的精度。
看以下代码:- #include <stdlib.h>#include <stdio.h>#include "gmp.h"#define USE_STR 1int main(){ mpf_t a, b, res; mpf_init2(a, 256); mpf_init2(b, 256); mpf_init2(res, 256);#if USE_STR mpf_set_str(a, "3.14", 10); mpf_set_str(b, "5.789", 10);#else mpf_set_d(a, 3.14); mpf_set_d(b, 5.789);#endif mpf_div(res, a, b); gmp_printf ("%.*Ff/%.*Ff", 50, a, 50, b); gmp_printf ("=%.*Ff\n", 50, res); mpf_clear(a); mpf_clear(b); mpf_clear(res); return 0;}
复制代码 当USE_STR=1时,输出结果如下:
3.14000000000000000000000000000000000000000000000000
/
5.78900000000000000000000000000000000000000000000000
=
0.54240801520124373812402832959060286750734150975989
当USE_STR=0时,输出结果如下:
3.14000000000000012434497875801753252744674682617188
/
5.78899999999999970157205098075792193412780761718750
=
0.54240801520124378756515637694292549171967387220245
———————————————————— |
|