令我印象最深刻的一次Bug,是在使用c++做作业时,需要用到一个if语句来判断某个浮点数是否等于1,于是我天真的写下了如下代码:
if(f == 1) do something;
然而结果却并不令人满意,运行结果时对时错。我冥思苦想了很长一段时间,最后才恍然大误:记得老师在课上曾经讲过,浮点数在计算机内的存储并不是精确的,1有可能变成了0.99999999999999999999。于是对if语句做了如下修改,便能得到正确答案了:
if(abs(f - 1) < 0.00001) do something;