C++ 中,double和float类型的变量不应该直接比较大小,在本次算例中:
-
语句
image.png
-
结果:
image.png
从输出结果中可见,满足if语句的gridData->(nod).value中有值为30,应该满足gridData->(nod).value==valueMin的值却被判定为小于valueMin,这是C++储存小数方式的问题,小于号比较的是double类型全部小数位数大小,而我们认为两值应该相等的时候,其实C++判断的结果可能不等,为了解决这种问题,可以通过一个极小值来判断,若gridData->(nod).value小于valueMin,必有gridData->(nod).value-valueMin<0,为了满足我们的需要,应同时判断当abs(gridData->(nod).value - valueMin)>1E-10 时,是满足小于号的。说明两值的差值在量级小于-10次幂的时候认为两值相等。
-
代码
image.png
网友评论