吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1918|回复: 19
收起左侧

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

[复制链接]
Shek_Mun 发表于 2021-7-19 07:25
如题,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语言程序么
头像被屏蔽
tlf 发表于 2021-7-19 08:48
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 01:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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