我發現了一個有趣的情況,其中相同的C++代碼在不同的系統上產生不同的結果。相同的C++'if'語句,Linux/Windows上的不同結果
#include <cstdio>
int main()
{
int a=20, b=14;
if(a*1.0/b*(a+1)/(b+1)==2) printf("YES!");
else printf("NO!");
}
編譯在Ubuntu Linux 12.04使用GCC 4.6.3它輸出YES!
編譯在Windows 7上使用GCC 4.6.2它輸出NO!
但是,使用:
double c = a*1.0/b*(a+1)/(b+1);
if (c==2) printf("YES!");
...
將返回YES!兩臺機器上的。
爲什麼這種差異出現的任何想法?這是由編譯器版本不匹配造成的(pathlevel版本號應該不重要)?爲什麼它實際上輸出不!在Windows機器上,而這種情況顯然是正確的?
浮點數! – Skizz
大家應該知道的關於浮點算術的東西:http://docs.sun.com/source/806-3568/ncg_goldberg.html – chris
與floatin點數的精確比較是壞主意 – Tibor