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