c语言中关系式的问题

img


在for里面的if中,如果将t=0.05i+0.02j+0.01k
放入if中,如图所示,但是直接写成这样if确不能通过if(x==0.05
i+0.02j+0.01k),

虽然你%f输出x的值是0.08,但其实x是0.07999999821186......,%f默认保留6位小数得到的0.08,不信你用%.20f输出x就看到了。
不是所有小数都能正好转化成一个相等的二进制数,小数转化成二进制的时候可能是无限的,位数特别长,所以
建议:
1.将x定义成double类型
2.判断x与0.08是否相等时用 x-0.08 < 0.0000001这样的关系式

是精度的原因 double的精度比float的精度高 精度就是小数点后能精确到多少位 浮点数不可以直接比较 浮点数会因为精度的原因产生误差 比如你输入0.08到变量x 那么去比较的时候你感觉x的值就是0.08 if(0.08 == x) 应该是true 实际上 编译器比较的时候 0.08可能因为精度的原因变成了 0.07999999 而常量0.08因为默认是double类型,精度更高 产生误差后可能是0.08000000000001 所以你换成double类型后 x的精度也提升上来了 再比较就不容易产生误差, 通常来说 浮点数比较应该写成 if(x - 0.08 < 0.00000001)就看作相等, 如果想更精确就再加小数位