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类型

发布了96 篇原创文章 · 获赞 92 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45525272/article/details/105651116