非一般的小数:小数的概念新解、小数分类、浮点数的存储
创作时间:
作者:
@小白创作中心
非一般的小数:小数的概念新解、小数分类、浮点数的存储
引用
CSDN
1.
https://blog.csdn.net/jjmhx/article/details/144899161
小数是数学和计算机科学中的一个基本概念,它不仅影响着我们日常的计算方式,还深刻影响着计算机内部的数据表示方法。本文将从多个角度重新审视小数的概念,探讨其分类,并深入解析浮点数在计算机中的存储方式。
一、小数的概念
这还用解释吗?小学三年级就开始学,你当我是吃干饭的?
那么,请尝试回答以下几个问题:
- 所有的分数都是小数吗?
- 所有的小数都是分数吗?
- 8.0是不是小数?
- 8是不是小数?
- 整数是不是小数?
- 有理数是不是小数?
- 无理数是不是小数?
- 实数是不是小数?
小数可不是看着那么简单,它实在是“非同一般”的数。
先看看小学课本中的定义:
有点草率哈!也难怪,小学三年级,这样说孩子最容易理解。
再看看百度百科中的定义:
小数,是
实数
的一种特殊的
表现形式
。所有分数都可以表示成小数,小数中的圆点叫做小数点,它是一个小数的整数部分和小数部分的分界号。其中整数部分是零的小数叫做纯小数,整数部分不是零的小数叫做带小数。
这里面有两个关键词:实数、表现形式。
“小数,是
实数
的一种特殊的
表现形式
”,这句话道出了小数的本质:
(1)小数是数的一种表现形式
什么叫表现形式,就是表现在外面的形式上的东西,它无关本质。好比人的衣服,它并不能真正代表这个人。
好比同样是数字,有罗马数字、阿拉伯数字、中文数字、财务上还有专用的大写数字,它们统统都是数字的表现形式。
因此,说到底,小数只不过是数的一种写法而已。
只要一个数能写成这样的形式:整数部分.小数部分,那么它就是小数。所以说,小数完全是形式化的东西。
(2)只要是实数,都能用小数的形式表现出来
任何实数都能写成小数。
用一张图可以表示出小数与实数范围内其他数的关系:
比如前面说的整数8,可以写成小数8.0、8.00、8.0000。
这里老金要指出一个关于小数的个人观点,不一定对,仅供参考。
老金认为,在表述小数和实数范围内的数之间的关系时,一定要注意用词。比如我们能说“实数可以写成小数”、“整数可以写成小数”,但不能说“实数是小数”、“整数是小数”。
如果说“实数是小数”、“整数是小数”,那数学就要乱套了。
这就好比我们可以说“数字都可以写成阿拉伯数字”,但不能说“数字是阿拉伯数字”。
因为上图中黑色部分都是根据数本身的不同性质进行分类的,只有小数不同,它只和写法有关,和性质无关。因此,小数和图左边那些数是完全不同的数,不能混为一谈。
所以,前面提的那一大堆问题,只有“8.0是不是小数?”这一条是肯定的。
据此,老金认为,我们小学时都学到的一个说法可能是不严谨的:π \piπ是无限不循环小数。
老金认为:严格来讲,我们可以说“π \piπ可以写成无限不循环小数”,但不能说“π \piπ是无限不循环小数”。
二、小数的分类
1.有限小数、无限循环小数、无限不循环小数
按小数点后的数字的性质可分为:
有限小数:小数点后只有有限个数字的小数,如0.5、0.25、1.75等。有限小数都可以表示为两个整数的比(分母不为0)。
无限小数:小数点后有无限多个数字。分为两类:
- 无限循环小数:小数点后的数字序列中,有一部分数字会无限重复。比如0.333…(或写作0.3 ‾ \overline{3}3)、0.142857142857…(或写作0.142857 ‾ \overline{142857}142857)。无限循环小数也可以表示为两个整数的比。
- 无限不循环小数:小数点后的数字序列不会重复,也不会终止。比如π、e(自然对数的底数)、2 \sqrt{2}2 等。无限不循环小数不能表示为两个整数的比。
2.纯小数、带小数
按整数部分是否为0可分为:
纯小数:整数部分为0的小数。
带小数:整数部分不为0的小数。
3.定点数、浮点数
按小数在计算机中的表示形式可分为:
定点数:指小数点在数中的位置是固定不变的。因为位置固定,所以实际上不需存储小数点。理论上讲,可以约定把小数点放在任何位置,但通常将其放在最后(纯整数:除符号位,所有数都表示整数)或最前(纯小数:除符号位,所有位都表示纯小数)。
浮点数:小数点的位置是不固定的,这使得浮点数可以表示非常大或非常小的数。
浮点数通常使用科学计数法来表示,即M × R E M \times R^EM×RE,其中 M 是尾数(或有效数字),E 是指数(或阶码),R是进制。
尾数和阶码均为带符号数。尾数的符号表示数的正负,阶码的符号则表明小数点的实际位置。浮点数的精度由尾数决定,数的表示范围由阶码决定。
如二进制小数10011.101,按浮点数形式可表示为1.0011101×24。
其中尾数为+1.0011101,阶码为+4。
三、浮点数的存储
浮点数的存储涉及到补码知识,参见“负数在计算机内的编码”一文。
补码规则如下:
- 正数补码都是其自身。
- 负数的补码是对应正数取反,再+1。
此外,还涉及到另一个概念:移码。
移码,就是对补码的符号位取反。假设用4位二进制数表示,-1的补码为1111,移码为0111;1的补码为0001,移码为1001。
0111在十进制下为7,1001在十进制下为9,相当于给原数加上了8(23)。
速算规律:n位二进制数的移码相当于加上2n-1。
在C/C++中,存放浮点数的变量类型为float和double,分别占用32位、64位二进制数,其空间的分配规则如下:
以float类型数据为例,在32位二进制空间中,从左往右: - 符号位:最高位为符号位,用来表示正负(0为正数、1为负数)。
- 指数位:接下来8位为指数位,用来存储浮点数阶码。只是实际存储的数据并非阶码的二进制值,而是将阶码先转为移码,再减1。也就是说,存入的数据为:阶码+27-1=阶码+127)。
- 尾数位:再之后23位用来表示尾数部分(纯小数)。因为浮点数的尾数都为1.××××,所以可将1和小数点都舍去,只存储小数点后边的部分。
例如,十进制数19.625,若以float类型存储,计算过程如下:
①浮点数:19.625转换为二进制数为10011.101,浮点数表示为1.0011101×24。
②符号位:正数,所以符号位为0。
③阶码位:阶码为+4,8位二进制对应存储数据为:阶码+127=4+127=131=10000011B。
④尾数位:尾数为1.0011101,舍去前面的1和小数点,只存储后面的0011101。
三个部分合在一起,得到19.625在内存中的存储形式如下:
0 10000011 00111010000000000000000
若以double类型存储,原理不变,只是指数位变为11位,对应的存储数据为:移码+1023(210-1)。
如十进制数2.5,若以double类型存储,计算过程如下:
①浮点数:2.5转换为二进制为10.1,浮点表示为1.01×21。
②符号位:正数,符号位为0。
③阶码位:阶码为+1,11位指数位的移码偏移为1023,1+1023=1024=10000000000B。
④尾数位:尾数为1.01,舍去前面的1和小数点,存储为01(之后50个0)。
合在一起,得到2.5在内存中的存储形式如下:
0 10000000000 01(之后50个0)
热门推荐
自媒体领域细化,如何精准定位自己的内容方向?
或许你不能放任大脑“胡吃海喝”
知识图谱与人工智能之间的关系
兴业研究:日元套息交易反转的四个阶段
ENFJ人格全面解析:理想主义者的魅力与挑战
事关集采药、原研药!国家药监局最新表态→
钱币收藏新手指南:揭秘入门知识与高效收藏技巧
公务员每月工资发放时间解析:1号、15号、30号发放工资的区别探讨
山东十大地理标志产品:从烟台绿茶到龙口粉丝,品味齐鲁大地的瑰宝
四项考古新成果揭示史前与夏商城址建制和文化发展脉络
行业跟踪:光伏,产能剧烈出清中
如何为两个月大的金毛提供健康成长所需的营养?
结膜炎是否怕烟熏?医生的专业解答来了
无犯罪记录证明和行政处罚证明怎么开?一文详解办理流程
近年来的移民潮对各国经济和社会结构产生了怎样的深远影响?
流体智力与晶体智力:认知能力解析及神经关联
骨折打的钢钉20年不取后期注意什么
运动是否有助于皮肤代谢
“饮食清淡”才不是喝粥吃素!营养师告诉你应该这样做
Nature最新研究:Omicron出现后,新冠病毒进化机制发生重大转变
吉利控股集团董事长李书福:坚持守正创新,建设“三个校园”
车载中控安装软件的步骤是什么?安装过程中可能会遇到哪些问题?
种植牙后肿胀正常吗?如何判断肿胀程度及处理方法?
技术创新驱动光伏产业高质量发展
HC-05、HC-06蓝牙模块配置与连接指南
2025年楼市,罕见的城市分化!
如何选购微波炉?五点建议要看看!
蛇宝宝十一月出生好吗:2025年运势与怀孕规划
如何选择毛笔
流浪猫“拆家”,谁担责?