printf("%f",1.0⼀3.0*3);的结果为什么是1.000000,而不是谭浩强书里写的“不等于1”。

2024-11-27 02:13:54
推荐回答(3个)
回答1:

这个涉及到了计算机对浮点型数据的存储问题,详细的解释太麻烦了,lz自己上网查吧,查关键字 IEEE745 就可以了

这里简单的讲一下,书上讲的没错1.0/3.0*3,严格意义上讲值确实不等于1.0
lz可以试一下这个代码
if(1.0/3.0*3==1.0)
printf("1.0/3.0*3==1.0\n");
else
printf("1.0/3.0*3!=1.0\n");

正常情况下,是会显示不等于的,为什么,看懂了浮点型数据的存储就肯定知道了
1.0/3.0 其值大约是 0.333333……,要知道计算机只能存储有限的数字,像1/3这个样的数学里的无穷小数,计算机肯定是无法精确表示的
另外还有存储的问题,所以实际存储的往往会是0.3333……123456789,类似这样的数据,就更加不精确了

回答2:

1=1

回答3:

1 表达式1.0/3.0*3的值是浮点数,浮点数在计算机中采用近似表示,与1不严格相等。
2 表达式1.0/3.0*3的值是浮点数,以整型十进制格式(%d格式)输出,结果由表达式1.0/3.0*3对应的二进制形式有关。
3 表达式(int)1.0/3.0*3的值是整数,以浮点数格式(%f格式)输出,结果由表达式(int)1.0/3.0*3对应的二进制形式有关。