首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

大家看看这个输出结果,很诡异,求真相!该怎么解决

2012-03-23 
大家看看这个输出结果,很诡异,求真相!main(){float x4.5,y1.5,zz(x+y)/3-(int)x%(int)yprintf(z%f

大家看看这个输出结果,很诡异,求真相!
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没什么关系!
求真相!
高手指点指点!


[解决办法]

C/C++ code
#include <stdio.h>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你看这个应该就会明白的
[解决办法]
答案是2.0(x+y)/3结果是2.0后面的结果是4%1为0.我在VC上结果是这样的
[解决办法]
是2.000000啊
这个没疑问啊
可能是版本问题吧
[解决办法]
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)

[解决办法]
main()
{
float[color=#FF0000][/color] 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
[解决办法]
应该是在进行(int)转换的时候,如果舍弃掉小数位,那么就是2.0,如果收起了小数位,那么就是1.5,是不是因为不同的平台对float转int的处理不太一样导致的?
[解决办法]
VS2010下面是2.00000
楼主这个跟平台有关
[解决办法]
/3

/3.0
不是一回事!
[解决办法]
2。0。。。。。。

[解决办法]
楼主,VC,devc++都是2.000000
[解决办法]
c-free里是2.000000
tc就不知道怎么了?
[解决办法]
楼主,vs2010里面是2.0000000000
[解决办法]
WINTC表示1.5
[解决办法]
好贴好贴
[解决办法]
运算出问题很正常,一般我直接关机重启,或换台电脑换个环境重试。
[解决办法]
都告诉你一步一步调试看了,这年头,谁还会用TC。
[解决办法]
用VC是2.0啊
[解决办法]
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);
}


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

用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)
同理,用二进制小数也不能精确表示某些10进制小数。

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

热点排行