C++ 中俄占,double和float類(lèi)型的變量不應(yīng)該直接比較大小萝招,在本次算例中:
-
語(yǔ)句
-
結(jié)果:
從輸出結(jié)果中可見(jiàn)矾飞,滿足if語(yǔ)句的gridData->(nod).value中有值為30筒饰,應(yīng)該滿足gridData->(nod).value==valueMin的值卻被判定為小于valueMin围俘,這是C++儲(chǔ)存小數(shù)方式的問(wèn)題晋柱,小于號(hào)比較的是double類(lèi)型全部小數(shù)位數(shù)大小优构,而我們認(rèn)為兩值應(yīng)該相等的時(shí)候,其實(shí)C++判斷的結(jié)果可能不等雁竞,為了解決這種問(wèn)題钦椭,可以通過(guò)一個(gè)極小值來(lái)判斷,若gridData->(nod).value小于valueMin碑诉,必有g(shù)ridData->(nod).value-valueMin<0彪腔,為了滿足我們的需要,應(yīng)同時(shí)判斷當(dāng)abs(gridData->(nod).value - valueMin)>1E-10 時(shí)进栽,是滿足小于號(hào)的德挣。說(shuō)明兩值的差值在量級(jí)小于-10次冪的時(shí)候認(rèn)為兩值相等。
-
代碼