S-Black 发表于 2021-2-22 09:53:52

1.0/3*3的结果

我在视频里看,老师说1.0/3*3的结果不是为1,因为计算机的运算思路是先算前面1.0/3,得出结果再用结果*3,所以结果不是1.
但是我编辑完之后计算出来的结果却是1.怎么回事。。。。

qiuyouzhi 发表于 2021-2-22 09:55:37

发代码

S-Black 发表于 2021-2-22 09:59:41

#include <stdio.h>
void main()
{
        printf("%f\n", 1.0 / 3 * 3);
        printf("%d\n", 3/ 2);
        printf("%d\n",1 / 3 * 3);
}

S-Black 发表于 2021-2-22 10:01:05

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

qiuyouzhi 发表于 2021-2-22 10:04:17

S-Black 发表于 2021-2-22 10:01
#include
void main()
{


结果就应该是1鸭
https://zhidao.baidu.com/question/878503467847647852.html

昨非 发表于 2021-2-22 10:13:09

      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

S-Black 发表于 2021-2-22 10:13:29

qiuyouzhi 发表于 2021-2-22 10:04
结果就应该是1鸭
https://zhidao.baidu.com/question/878503467847647852.html

嗯。。。我可以理解为他是无穷数,然后结果被四舍五入了吗

S-Black 发表于 2021-2-22 10:15:18

昨非 发表于 2021-2-22 10:13
printf("%f\n", 1.0 / 3 * 3);   1.0/3得到的是float型的0.3333,再乘以三,还原为1,依旧是float ...

那第一个计算的结果不是0.9999999~,而是1.000,是因为被四舍五入了吗

昨非 发表于 2021-2-22 10:18:09

S-Black 发表于 2021-2-22 10:15
那第一个计算的结果不是0.9999999~,而是1.000,是因为被四舍五入了吗

既然精度没有损失,为什么会是0.9999,1.0除以三再乘回来为什么会变?

S-Black 发表于 2021-2-22 10:24:04

昨非 发表于 2021-2-22 10:18
既然精度没有损失,为什么会是0.9999,1.0除以三再乘回来为什么会变?

哦吼~~~了解,那如果精度出现损失,那结果会如何变化呢

qiuyouzhi 发表于 2021-2-22 10:25:29

S-Black 发表于 2021-2-22 10:13
嗯。。。我可以理解为他是无穷数,然后结果被四舍五入了吗

??0.99999... = 1啊
为啥要四舍五入,他俩本来就是相等的,就是转换了一下

昨非 发表于 2021-2-22 10:26:56

S-Black 发表于 2021-2-22 10:24
哦吼~~~了解,那如果精度出现损失,那结果会如何变化呢

第三行代码就是精度损失的例子啊
只保留整数1/3就是0了,小数点儿往后就都损失掉了

S-Black 发表于 2021-2-22 10:28:04

qiuyouzhi 发表于 2021-2-22 10:25
??0.99999... = 1啊
为啥要四舍五入,他俩本来就是相等的,就是转换了一下

这样的吗{:10_257:}
了解了解

S-Black 发表于 2021-2-22 10:29:13

昨非 发表于 2021-2-22 10:26
第三行代码就是精度损失的例子啊
只保留整数1/3就是0了,小数点儿往后就都损失掉了

嗯~了解了,谢谢耐心解答
页: [1]
查看完整版本: 1.0/3*3的结果