加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

相同的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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读