1.0/3*3的结果
我在视频里看,老师说1.0/3*3的结果不是为1,因为计算机的运算思路是先算前面1.0/3,得出结果再用结果*3,所以结果不是1.但是我编辑完之后计算出来的结果却是1.怎么回事。。。。 发代码 #include <stdio.h>
void main()
{
printf("%f\n", 1.0 / 3 * 3);
printf("%d\n", 3/ 2);
printf("%d\n",1 / 3 * 3);
} qiuyouzhi 发表于 2021-2-22 09:55
发代码
#include <stdio.h>
void main()
{
printf("%f\n", 1.0 / 3 * 3);
printf("%d\n", 3/ 2);
printf("%d\n",1 / 3 * 3);
}
得出的结果
1.0000
1
0
S-Black 发表于 2021-2-22 10:01
#include
void main()
{
结果就应该是1鸭
https://zhidao.baidu.com/question/878503467847647852.html printf("%f\n", 1.0 / 3 * 3); 1.0/3得到的是float型的0.3333,再乘以三,还原为1,依旧是float型按%f打印输出,所以为1.000
printf("%d\n", 3/ 2); 3/2,整型之间作除法,向下取整,值位1,按整型%d打印输出为1
printf("%d\n",1 / 3 * 3); 先执行1/3,执行之间作除法,下取整为0,再乘以三,依旧为0,按整形%d打印输出为0 qiuyouzhi 发表于 2021-2-22 10:04
结果就应该是1鸭
https://zhidao.baidu.com/question/878503467847647852.html
嗯。。。我可以理解为他是无穷数,然后结果被四舍五入了吗 昨非 发表于 2021-2-22 10:13
printf("%f\n", 1.0 / 3 * 3); 1.0/3得到的是float型的0.3333,再乘以三,还原为1,依旧是float ...
那第一个计算的结果不是0.9999999~,而是1.000,是因为被四舍五入了吗
S-Black 发表于 2021-2-22 10:15
那第一个计算的结果不是0.9999999~,而是1.000,是因为被四舍五入了吗
既然精度没有损失,为什么会是0.9999,1.0除以三再乘回来为什么会变? 昨非 发表于 2021-2-22 10:18
既然精度没有损失,为什么会是0.9999,1.0除以三再乘回来为什么会变?
哦吼~~~了解,那如果精度出现损失,那结果会如何变化呢 S-Black 发表于 2021-2-22 10:13
嗯。。。我可以理解为他是无穷数,然后结果被四舍五入了吗
??0.99999... = 1啊
为啥要四舍五入,他俩本来就是相等的,就是转换了一下 S-Black 发表于 2021-2-22 10:24
哦吼~~~了解,那如果精度出现损失,那结果会如何变化呢
第三行代码就是精度损失的例子啊
只保留整数1/3就是0了,小数点儿往后就都损失掉了 qiuyouzhi 发表于 2021-2-22 10:25
??0.99999... = 1啊
为啥要四舍五入,他俩本来就是相等的,就是转换了一下
这样的吗{:10_257:}
了解了解 昨非 发表于 2021-2-22 10:26
第三行代码就是精度损失的例子啊
只保留整数1/3就是0了,小数点儿往后就都损失掉了
嗯~了解了,谢谢耐心解答
页:
[1]