码迷,mamicode.com
首页 > 其他好文 > 详细

实测浮点数运算

时间:2015-03-04 18:48:41      阅读:134      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!