BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #100374同步于 2020/10/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

c语言中float和整数相加问题

saber154
2020/10/19镜像同步13 回复
为什么这个float值和2000加就是正确的值。和4000相加的时候就是四舍五入了。我试了一下,与5*x相加的数,从大于等于2044开始就出现问题了。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
specops机器人#1 · 2020/10/19
精度不够 PS:试一下0.1+0.2
saber154机器人#2 · 2020/10/19
我试了下两个浮点数会这样,但是我不太清楚的是两个位数相同的整数2000,4000,他们转化为float也是小数点后面都是0,但在与float型的这个数5*x相加时会有不同的结果呢。 【 在 specops 的大作中提到: 】 : 精度不够 : PS:试一下0.1+0.2
DukeGmw机器人#3 · 2020/10/19
我B站视频自学的,在我印象中小数的存储是很复杂的,不是精确的存储。 https://sandtower.blog.csdn.net/article/details/104688114?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
saber154机器人#4 · 2020/10/19
谢谢兄弟,看了这个文章及其传送门,我知道了是怎么丢失精度的,并且是如何进行二进制运算的,然后再转化为十进制。float型运算比较有可能出现精度错误,但是具体这个问题上,我猜或许是2044比较接近2048会在2的10次方基础上多一位,导致一些错误什么的吧。仔细研究的话,还得详细用它的计算模式走一遍 【 在 DukeGmw 的大作中提到: 】 : 我B站视频自学的,在我印象中小数的存储是很复杂的,不是精确的存储。 : https://sandtower.blog.csdn.net/article/details/104688114?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
plazum机器人#5 · 2020/10/19
楼主可以尝试把想要研究的浮点数的内存表达形式打印出来,比如 char *a = (char *)&j; 然后用a[0]到a[3]去访问它 把一个整数用二进制的形式输出的代码这里就省略了
saber154机器人#6 · 2020/10/20
我试了下打印内存是这样的,可以把这地址转化为2进制是吧 【 在 plazum 的大作中提到: 】 : 楼主可以尝试把想要研究的浮点数的内存表达形式打印出来,比如 : char *a = (char *)&j; : 然后用a[0]到a[3]去访问它 : ...................
plazum机器人#7 · 2020/10/20
不是把地址转换成二进制,而是查看浮点数的二进制表达形式 不过我又发现我上面那个方法有点多此一举了,实际上可以直接赋值给一个unsigned int,就像这样 unsigned a = *(unsigned *)&j; 然后用二进制输出a for (int i = 31; i >= 0; i--) printf("%d", (a >> i) % 2); 【 在 saber154 (saber) 的大作中提到: 】 : 我试了下打印内存是这样的,可以把这地址转化为2进制是吧[upload=1][/upload][upload=2][/upload]
saber154机器人#8 · 2020/10/22
我试了下输出全是0 【 在 plazum 的大作中提到: 】 : 不是把地址转换成二进制,而是查看浮点数的二进制表达形式 : 不过我又发现我上面那个方法有点多此一举了,实际上可以直接赋值给一个unsigned int,就像这样 : unsigned a = *(unsigned *)&j; : ...................
plazum机器人#9 · 2020/10/22
是不是哪里弄错了 【 在 saber154 (saber) 的大作中提到: 】 : 我试了下输出全是0