首页 > 其他 > 详细

实测浮点数运算

时间:2015-03-04 18:46:35      阅读:208      评论:0      收藏:0      [点我收藏+]

看了 顾森 的文章,拿起自己的魅族用自带的calc试了下,BUG早已经被修复.

C/C++刷题的时候判断浮点数相等直接用等号被坑过好多次,甚至有一回输出 -0.0

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

用python(x,y)试了一下

>>> print 1.3-1.2-.1
8.32667268469e-17
>>> print 1.2-1.1-.1
-1.38777878078e-16

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Java

System.out.println(1.3-1.2-0.1);
System.out.println(1.3F-1.2F-0.1F);

System.out.println(BigDecimal.valueOf(1.3).subtract(BigDecimal.valueOf(1.2)).subtract(BigDecimal.valueOf(0.1)));

8.326672684688674E-17
-9.685755E-8

0.0

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

根本原因还是小数不一定能够用二进制浮点数精确表示,也就是说有些小数只能在精度内尽可能用最相近的二进制浮点数表示,所以会有误差

Java的话有现成的BigDecimal可以用

不然的话还是用C判断浮点数相等的老办法----控制精度 

假如减数和被减数的小数位数都在10位以内,加一个判断,若 fabs(a-b)<1e-10 输出0.0   

实测浮点数运算

原文:http://www.cnblogs.com/syzhd/p/4313847.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!