打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C++ 输入的是1.3变1.29999995问题

今天一位粉丝在评论中问到了这个问题,我简单的说了原理和改进方法,将float改为double就可以了,下面我进行详细整理




先说一下debug是啥意思

马克2号(Harvard Mark II)编制程序的葛丽丝·霍波(Grace Hopper)是一位美国海军准将及计算机科学家,同时也是世界最早的一批程序设计师之一。有一天,她在调试设备时出现故障,拆开继电器后,发现有只飞蛾被夹扁在触点中间,从而“卡”住了机器的运行。于是,霍波诙谐的把程序故障统称为“臭虫(bug)”,把排除程序故障叫debug,而这奇怪的“称呼”,竟成为后来计算机领域的专业行话。

下面用网上的程序做例子


当你设置断点监控变量时,观察调试窗口里的m,发现并不是输入的1.3,而是1.29999995。可是明明输入的1.3,为啥就变了呢?

仔细查看程序,发现变量m定义的是float类型,单精度浮点数

浮点数在内存中的存储机制和整型数不同,其有舍入误差,在计算机中用近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学记数法。所以浮点数在运算过程中通常伴随着因为无法精确表示而进行的近似或舍入。

我们知道在C++中浮点数类型有float、double和long double,那么它们之间到底有什么差别呢?

C++中浮点数类型差别是:

  • 在内存中占有的字节数不同
  • 有效数字位数不同
  • 所能表示数的范围不同

ps:数据类型详细介绍请见我另一篇博客

所以,我们将程序中的float修改为double就可以了,强制转换的时候也最好转换为double类型

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
float浮点数会自动四舍五入吗 大部分人都想错了 – 瑞生网
Java符点数二进制分析(转)
zz 浮点数存储格式
java基础知识讲解(一)数据类型和运算符
java四类八种基本数据类型
计算机怎么处理小数的
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服