- 注册时间
- 2009-5-22
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 38578
- 在线时间
- 小时
|
楼主 |
发表于 2019-1-19 03:02:28
|
显示全部楼层
参考文献$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 1
- int 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
———————————————————— |
|