上海supreme实体店地址:一个C语言编程问题?

来源:百度文库 编辑:高校问答 时间:2024/04/29 10:07:15
也就是为了证明1.0/3.0*3.0 运算之后不会等于1.0
main()
{
int a;
a=(1.0/3.0*3.0==1.0);
printf("a=%d",a);
}
在tc 2.0中运行之后结果为 a=1.但是我认为是a=0,因为实数1.0/3.0*3.0在运算之后不会是1.0
不知道为什么a=1.谢谢大家指点.
不是有这个规定吗
在系统中不能精确表示一个实型数吗?
就是1.0/3.0*3.0不会1.0,它应该是0.999999,这样它不会
等于1.0啦!
我意思是说本来1.0/3.0*3.0运算之后,在计算机中表示的时候可能是0.999999也就是它不会恒等于1.0,这样括号里面的逻辑表式不会是1,而是0,这样再赋值给变量a. 这样a就等于0啦!

那我怎么样才能使别人知道,在计算机里1.0/3.0*3.0不是1.0呢.

在一定精度范围内是不能够看到结果的。有方法可以改进:
if (1.0/3.0*3.0 - 1.0 < 10E-5)
printf (...);
else
printf (...);
通常这是比较两个浮点数的正统方法,可以比单纯的比较更精确。另外你也可以使用double变量尝试。

因为1.0/3.0*3.0他是浮点型表达式
而a是整型变量
1.0/3.0*3.0运行给果为1.0在赋值给变量a取整所以就是1了
还有在无限循环小数运算时候他可以进1位的

比较浮点数不能直接用==,要用fabs(两数差)<某个很小的值

main()
{
int a;
a=1/3*3;
printf("a=%d",a);
}

C的==可以是在一定的范围内就算是返回1了。

因为你要求打出来的数据为整数型(printf("%d",a);)的!