C++ Primer 学习笔记:浮点数精度问题
2017-12-29 20:51
232 查看
之前做过LFF Solver的时候遇到了浮点数的精度问题,因为浮点数计算到一定的精度之后的计算结果就全靠运气了。
这个本身是由于浮点数本身是按照科学计数法来存储的,在坐标轴上的分布是很不均匀,越靠近0浮点数越密集,越远离0浮点数越稀疏,所以在远离0的大的浮点数存在大数吃掉小数的情况,那么浮点数的精度(分辨率)在坐标轴上不同的位置也是不一样,越靠近0,精度越高,反之越低。
那么在计算机制单精度float和双精度double的一般的精度是多少呢?一般来说float的精度是1e-6,double是1e-10,也就是说当两个浮点数的距离小于这个精度之后就可以认为a和b是相等的,所以浮点数的等于运算也要注意这个情况,不可以茫然的直接使用==来判定浮点数的等于与否
其实有时候我们使用双精度求解出来的结果再重新代入相关过程去重新就散,结果可能不对,这个时候就是浮点数精度的问题
这个本身是由于浮点数本身是按照科学计数法来存储的,在坐标轴上的分布是很不均匀,越靠近0浮点数越密集,越远离0浮点数越稀疏,所以在远离0的大的浮点数存在大数吃掉小数的情况,那么浮点数的精度(分辨率)在坐标轴上不同的位置也是不一样,越靠近0,精度越高,反之越低。
那么在计算机制单精度float和双精度double的一般的精度是多少呢?一般来说float的精度是1e-6,double是1e-10,也就是说当两个浮点数的距离小于这个精度之后就可以认为a和b是相等的,所以浮点数的等于运算也要注意这个情况,不可以茫然的直接使用==来判定浮点数的等于与否
其实有时候我们使用双精度求解出来的结果再重新代入相关过程去重新就散,结果可能不对,这个时候就是浮点数精度的问题
相关文章推荐
- C++ Primer 学习笔记-练习6.7的答案错了?
- C++ Primer学习笔记之第12章-泛型-踩在巨人的脚背上-prog12.cpp程序
- [学习笔记][ASP.NET]发现CuteEditor的一个小问题
- 学习C++ Primer 笔记 1
- STL学习笔记:用非递归的方法实现汉诺塔问题
- 学习C++ Primer 笔记 2
- C++ primer 数据类型的学习笔记
- C++ Primer 3ed 学习笔记 (2)
- [ITIL学习笔记]ITIL问题集(不断更新中)
- [ITIL学习笔记]之问题管理(1)
- java学习笔记,试用初学者,第二节,关于内存地址分配问题
- XSL学习笔记:XSLT优先级问题
- XSL学习笔记:XSLT优先级问题
- Atlas学习笔记:使用UpdatePanel控件需注意的问题
- Oracle 学习过程中的笔记以及几个问题
- jdbc的连接问题-----java数据学习笔记之2
- C++ Primer 学习笔记-第六章之总结
- C++ Primer 3ed 学习笔记 (1)
- C++ Primer学习笔记第六章tquery.cpp程序的剖析
- [学习笔记][ASP.NET2.0][点击asp:Button出现两次提交数据的问题][解决:去掉OnClick或者OnCommand属性]