c语言中关于0的问题
这个例题是求二次函数的根,为什么△=0的情况下,代码里写的是△绝对值小于等于一个非常小的数(既fabs(disc)<=1e-6)而不直接是=0呢,这样不会导致△的值还是有...
这个例题是求二次函数的根,为什么△=0的情况下,代码里写的是△绝对值小于等于一个非常小的数(既fabs(disc)<=1e-6)而不直接是=0呢,这样不会导致△的值还是有可能大于或者小于零吗
展开
展开全部
由于计算机能够表示的浮点数精度有限,因此计算机在将浮点数表示为二进制时,会存在精度缺失问题,例如用C语言测试0.1+0.1+0.1-0.3的结果为:
可以发现虽然a打印出来为0.000000(只显示了小数点后6位)
但判断a==0的结果并不为真,说明计算机认为0.1+0.1+0.1-0.3≠0
原因在于0.1的二进制表示为0.000110011001....(后面1001循环)
计算机只能用有限精度来表示无限位的0.1,计算时肯定会引入误差
最终导致三个0.1相加的结果不等于0.3
解决办法是令计算结果a的绝对值与一个非常小的正数相比,如1e-6
当a的绝对值fabs(a)<=1e-6,就可以认为a等于0了,如图:
此时输出为yes,即认为a≈0
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询