您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> C/C++ >> 大家看看这个输出结果,很诡异,求真相!

大家看看这个输出结果,很诡异,求真相!

来源:网络整理     时间:2016/7/17 2:12:37     关键词:

关于网友提出的“ 大家看看这个输出结果,很诡异,求真相!”问题疑问,本网通过在网上对“ 大家看看这个输出结果,很诡异,求真相!”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 大家看看这个输出结果,很诡异,求真相!
描述:

main()
{
   float x=4.5,y=1.5,z;
   z=(x+y)/3-(int)x%(int)y;
   printf("z=%f",z);
}
结果怎么是1.5呢?似乎与(x+y)/3没什么关系!
求真相!
高手指点指点!


解决方案1:

TC不管在啥机器上
float都按8位对待
现在的机器一般是32位或者64位,但TC任然按16为对待

解决方案2:

main()
{
  float x=4.5,y=1.5,z;
  z=(x+y)/3-(int)x%(int)y;      //z=(4.5+1.5)/3-4%1=6/3-0=2.000 都是这个结果
  printf("z=%f",z);
}

解决方案3:

用VC是2.0啊

解决方案4:

都告诉你一步一步调试看了,这年头,谁还会用TC。

解决方案5:

运算出问题很正常,一般我直接关机重启,或换台电脑换个环境重试。

解决方案6:

好贴好贴

解决方案7:

WINTC表示1.5

解决方案8:

楼主,vs2010里面是2.0000000000

解决方案9:

c-free里是2.000000
tc就不知道怎么了?

解决方案10:

楼主,VC,devc++都是2.000000

解决方案11:

2。0。。。。。。

解决方案12:

应该是在进行(int)转换的时候,如果舍弃掉小数位,那么就是2.0,如果收起了小数位,那么就是1.5,是不是因为不同的平台对float转int的处理不太一样导致的?

解决方案13:

main()
{
    float x=4.5,y=1.5;
    printf("\n=%f",(x+y)/3 - (int)x % (int)y);
 
}
结果是1.5
main()
{
    double x=4.5,y=1.5;
    printf("\n=%f",(x+y)/3 - (int)x % (int)y);
 
}
结果是2.0

解决方案14:

是2.000000啊
这个没疑问啊
可能是版本问题吧

解决方案15:

答案是2.0(x+y)/3结果是2.0后面的结果是4%1为0.我在VC上结果是这样的

解决方案16:

VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)
同理,用二进制小数也不能精确表示某些10进制小数。

解决方案17:

/3

/3.0
不是一回事!

解决方案18:

VS2010下面是2.00000
楼主这个跟平台有关

解决方案19:

VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)

解决方案20:


#include 
int main()
{
double x=4.5,y=1.5,z;
printf("%d  %d\n",(int)x,(int)y);
printf("%d\n",(int)x % (int)y);
z=(x+y)/3 - (int)x % (int)y;
printf("z=%lf",z);
return 0;
}
//结果是2.00000你看这个应该就会明白的

以上介绍了“ 大家看看这个输出结果,很诡异,求真相!”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2735024.html

相关图片

相关文章