同じC++コードが異なるシステムで異なる結果をもたらす興味深いケースを見つけました。
#include <cstdio>
int main()
{
int a=20, b=14;
if(a*1.0/b*(a+1)/(b+1)==2) printf("YES!");
else printf("NO!");
}
GCC4.6.3を使用してUbuntuLinux12.04でコンパイルすると、YESが出力されます。
GCC4.6.2を使用してWindows7でコンパイルすると、NOが出力されます。
ただし、以下を使用します。
double c = a*1.0/b*(a+1)/(b+1);
if (c==2) printf("YES!");
...
YESを返します!両方のマシンで。
この違いが現れる理由はありますか?これはコンパイラのバージョンの不一致が原因ですか(パスレベルのバージョン番号はそれほど重要ではありません)?そして、なぜそれは実際にNOを出力するのですか?Windowsマシンでは、この条件は明らかに正しいですか?