相同的C’if’语句,Linux / Windows上的结果不同
发布时间:2020-12-16 06:49:20 所属栏目:百科 来源:网络整理
导读:我发现了一个有趣的案例,相同的C代码在不同的系统上产生不同的结果. #include cstdioint main(){ int a=20,b=14; if(a*1.0/b*(a+1)/(b+1)==2) printf("YES!"); else printf("NO!");} 使用GCC 4.6.3在Ubuntu Linux 12.04上编译,输出YES! 使用GCC 4.6.2在Wind
我发现了一个有趣的案例,相同的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!"); } 使用GCC 4.6.3在Ubuntu Linux 12.04上编译,输出YES! 使用GCC 4.6.2在Windows 7上编译,输出NO! 但是,使用: double c = a*1.0/b*(a+1)/(b+1); if (c==2) printf("YES!"); ... 将返回YES!在两台机器上. 有什么想法出现这种差异?这是由编译器版本不匹配引起的(路径级版本号应该不重要)?为什么它实际输出NO!在Windows机器上,这种情况显然是真的吗? 解决方法
这只是猜测,您需要查看编译器的汇编输出才能确定.
一个编译器可能会将中间结果存入浮点寄存器,而另一个编译器将结果写入存储器,将其从80位舍入到64位.也可能是使用SSE而另一个不使用SSE. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |