c语言小数的减法问题

为什么这个程序判断他们相等呢?明明两个数不相等啊,这个是因为什么原因呢?

img

在 C 语言中,浮点数的比较通常不应使用“==”运算符来判断是否相等。这是因为浮点数的表示方式是有限的,而有些数的精确值在二进制中是无法精确表示的,因此可能存在误差。在这个例子中,a 和 b 的值都不是精确的,因为 10.9999999999 和 11 都不能被准确地表示为二进制浮点数。因此,使用“==”运算符比较 a 和 b 可能会得到错误的结果。

为了避免这种情况,应该使用一个误差范围来判断两个浮点数是否相等。例如,可以判断它们之间的绝对误差是否小于某个小数值 ε,即 |a - b| < ε。这里的 ε 取决于所需的精度和浮点数的范围。

虽然浮点数你写成10.99999999.。。,但由于浮点数的误差,可能导致实际存储的是11.00000001,这样赋值给int类型,会强行截尾,因此a=11是有可能的
这根减法有啥关系呢?

10.9999浮点型转成int型 可不就是11吗?

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^