鱼C论坛

 找回密码
 立即注册
查看: 1476|回复: 13

[已解决]1.0/3*3的结果

[复制链接]
发表于 2021-2-22 09:53:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我在视频里看,老师说1.0/3*3的结果不是为1,因为计算机的运算思路是先算前面1.0/3,得出结果再用结果*3,所以结果不是1.
但是我编辑完之后计算出来的结果却是1.怎么回事。。。。
最佳答案
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-22 09:55:37 | 显示全部楼层
发代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-22 10:01:05 | 显示全部楼层

#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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-22 10:04:17 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-22 10:13:29 | 显示全部楼层
qiuyouzhi 发表于 2021-2-22 10:04
结果就应该是1鸭
https://zhidao.baidu.com/question/878503467847647852.html

嗯。。。我可以理解为他是无穷数,然后结果被四舍五入了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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,是因为被四舍五入了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

既然精度没有损失,为什么会是0.9999,1.0除以三再乘回来为什么会变?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-22 10:24:04 | 显示全部楼层
昨非 发表于 2021-2-22 10:18
既然精度没有损失,为什么会是0.9999,1.0除以三再乘回来为什么会变?

哦吼~~~了解,那如果精度出现损失,那结果会如何变化呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

??0.99999... = 1啊
为啥要四舍五入,他俩本来就是相等的,就是转换了一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-22 10:26:56 | 显示全部楼层
S-Black 发表于 2021-2-22 10:24
哦吼~~~了解,那如果精度出现损失,那结果会如何变化呢

第三行代码就是精度损失的例子啊
只保留整数1/3就是0了,小数点儿往后就都损失掉了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-22 10:28:04 | 显示全部楼层
qiuyouzhi 发表于 2021-2-22 10:25
??0.99999... = 1啊
为啥要四舍五入,他俩本来就是相等的,就是转换了一下

这样的吗
了解了解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

嗯~了解了,谢谢耐心解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 19:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表