C/C++语言 浮点数比较大小

来源:百度知道 编辑:UC知道 时间:2024/06/02 04:22:20
记得书上说过,浮点数比较大小不能用等号,要用作差法比较。但经常做练习时,在while(i != -1.0)类似这样的循环中(i是float或double),只要i被输入-1.0,循环体仍然会被跳过。请问是怎么回事?不是说浮点数会有误差吗?为什么此时通过scanf(“%lf”,&i)(或cin>>i)且输入-1.0时,i != -1.0仍旧是不成立的?

谢谢解答!

浮点数比较大小,由于精度问题,所以直接比较有时可能会出错。
所以在比较的时候需要用一个很小的数值来进行比较。当二者差小于这个很小的数时,就认为二者是相等的了。这个很小的数,称为精度。
精度由计算过程中需求而定。比如一个常用的精度为1E-6.也就是0.000001.
所以对于两个浮点数a,b
如果fabs(a-b)<=1E-6,那么就是相等了。 fabs是求浮点数绝对值的函数。

类似的 判断大于的时候,就是if(a>b && fabs(a-b)>1E-6)。
判断小于的时候,就是if(a<b&&fabs(a-b)>1E-6)。

你输入-1.0和程序里写的-1.0都是通过C语言的浮点库转换的,结果自然相同。

所谓要不能直接用== !=判断是对于经过运算造成误差以后(而且也不是所有运算都会造成误差,比如-1.0 + -1.0 == -2.0这个肯定能成立,因为并没涉及误差问题)。