long double 加减法计算精度问题

charles_great 2019-03-21 05:27:10
进行加减法运算, Clion工具:
long double ldTest1 = 123456.123456798888;
long double ldTest2 = 123456.123456798887;
long double ldTest3 = ldTest1 - ldTest2;
long double ldTest4 = ldTest2 + 0.000000000001;

printf("ldTest1 %.15Lf\n", ldTest1);
printf("ldTest2 %.15Lf\n", ldTest2);
printf("ldTest3 %.15Lf\n", ldTest3);
printf("ldTest4 %.15Lf\n", ldTest4);

输出结果如下:
ldTest1 123456.123456798886764
ldTest2 123456.123456798886764
ldTest3 0.000000000000000
ldTest4 123456.123456798887766

ldTest1和ldTest2的值居然是一样的
这样来看计算结果是有问题的
...全文
549 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
老马何以识途 2019-03-22
  • 打赏
  • 举报
回复
浮點數的實現方式是指數式的,所以不會每一位都精確。自己實現一個精確的浮點數,思路可以這樣:整數和小數分別用長整數表示,如果需要精度更高,也可能長整數達不到要求,可以用多個長整數,不過進位等方面就比較複雜了。
赵4老师 2019-03-21
  • 打赏
  • 举报
回复
636f6c696e 2019-03-21
  • 打赏
  • 举报
回复
自己用数据结构实现
引用 2 楼 charles_great 的回复:
怎么算呢?
引用 1 楼 老马何以识途 的回复:
這是跟浮點數的存儲和表達方式有關的,如果你需要每一個小數位的精確,需要另外的算法。
charles_great 2019-03-21
  • 打赏
  • 举报
回复
怎么算呢?
引用 1 楼 老马何以识途 的回复:
這是跟浮點數的存儲和表達方式有關的,如果你需要每一個小數位的精確,需要另外的算法。
老马何以识途 2019-03-21
  • 打赏
  • 举报
回复
這是跟浮點數的存儲和表達方式有關的,如果你需要每一個小數位的精確,需要另外的算法。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧