Shek_Mun 发表于 2021-7-19 07:25

【C++】为什么简单的相加结果却不对

如题,C++的相加浮点型相加,我把a的值改成其他答案(例如4.2)就正确显示,可为什么5.2+3.1的结果会是8.999999(9的循环)呢?
我的猜测
像我之前问过朋友,他是这么解释的:
因为浮点数值采用二进制系统表示,而在二进制系统中无法精确地表示分数3/10,
这就好像十进制无法精确地表示分数1/3一样
他这个说法我刚开始是表示赞同的,但我想到了另一个问题:
所谓的0.9(9的无限循环)是否等于1
事实证明不对,我但凡把5.2换成别的,结果都是正确的(例如4.2)

shallies 发表于 2021-7-19 07:50

浮点运算就是这样的

ll996075dd 发表于 2021-7-19 08:02

二进制不能准确的表示0.1这个数,改0.1这个数值就是精确地

侃遍天下无二人 发表于 2021-7-19 08:03

了解一下浮点数的构成,这本来就是不精确的,float的有效数字只有6位

ll996075dd 发表于 2021-7-19 08:04

改成double类型即可解决

nanaqilin 发表于 2021-7-19 08:19

楼主这个这个结果是8.2999这个值是正确的,二进制转浮点时会产生量化误差的,你可以了解一下浮点的原理,你上面写的8.9999这个值是不对的

firo1603 发表于 2021-7-19 08:24

0.9循环=1的结果是数学推导,浮点计算是计算机的运算模式,两个就不是一回事情

中国卢沟桥 发表于 2021-7-19 08:30

这个还真不好说,我看了,也看的不是很通透。

Anekys 发表于 2021-7-19 08:37

刚学C++,没看懂include<iostream>的意义在哪
这个不应该是个标准的c语言程序么{:301_985:}

tlf 发表于 2021-7-19 08:48

页: [1] 2
查看完整版本: 【C++】为什么简单的相加结果却不对