大家看看这个输出结果,很诡异,求真相!
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为对待