浮点数的比较_字面量

 

浮点数的比较_二进制数_02

在此程序中,调试时显示W和x的值都为99,但程序运行时进入的却是第一个if语句。这是因为浮点数的精度问题,在比较时会有误差。

浮点数的比较_二进制数_03

 

浮点数的比较_数据_04

 

 这里可以看出c的值并不是2.46800000000,而是2.4679999352四舍五入出来的。因此浮点数不要直接用==或!=来做比较。

(ps:带小数点的字面量是double而非float,需要用f或F后缀来表明身份)

浮点数的比较_浮点数_05

 对x赋值99.1,电脑中的值是99.09999999994。

对于问题的解决,a==b我们可以改用fabs(a-b)<1e-8或者更小的数。

最开始的代码可以改为

浮点数的比较_二进制数_06

 

整数在电脑里是纯二进制数,但浮点数是编码的形式。

当运算元角分之类的问题时,不要用元做单位使用double类型,而是用分做单位使用整型,int类型的数据是精确的。

浮点数的比较_二进制数_07