当前位置: 首页 > news >正文

非一般的小数:小数的概念新解、小数分类、浮点数的存储

非一般的小数:小数的概念新解、小数分类、浮点数的存储

  • 一、小数的概念
  • 二、小数的分类
      • 1.有限小数、无限循环小数、无限不循环小数
      • 2.纯小数、带小数
      • 3.定点数、浮点数
  • 三、浮点数的存储

一、小数的概念

这还用解释吗?小学三年级就开始学,你当我是吃干饭的?
那么,请尝试回答以下几个问题:

  • 所有的分数都是小数吗?
  • 所有的小数都是分数吗?
  • 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^E M×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)

相关文章:

非一般的小数:小数的概念新解、小数分类、浮点数的存储

非一般的小数:小数的概念新解、小数分类、浮点数的存储 一、小数的概念二、小数的分类1.有限小数、无限循环小数、无限不循环小数2.纯小数、带小数3.定点数、浮点数 三、浮点数的存储 一、小数的概念 这还用解释吗?小…...

关于游戏销量的思考

1、黑神话达到2300万套,分析师上调预期到超过100亿营收。 以往的我的世界、小鸟、超级食肉男孩等游戏也都是几千万,上亿的销量。 也改变了相关开发者的命运。 一个开发者,卖出一个30万,或100万销量的作品,就足够改变…...

JuiceFS 详解:一款为云原生设计的高性能分布式文件系统

JuiceFS 详解:一款为云原生设计的高性能分布式文件系统 1. 什么是 JuiceFS? JuiceFS(Juiced File System)是一款高性能、POSIX 兼容的云原生分布式文件系统。它采用对象存储作为底层存储,支持多种元数据引擎&#xf…...

百度Android面试题及参考答案 (下)

Executorservice 和 Executor 有什么区别? Executor 接口 Executor 是一个简单的接口,它定义了一个方法execute(Runnable command)。这个接口的主要目的是将任务的提交和任务的执行分离,它提供了一种通用的方式来执行一个Runnable任务,但是它没有提供更多高级的功能,比如任…...

RK3588+FPGA全国产异步LED显示屏控制卡/屏幕拼接解决方案

RK3588FPGA核心板采用Rockchip RK3588新一代旗舰 级八核64位处理器,支持8K视频编解码,多屏4K输出,可实现12屏联屏拼接、同显、异显,适配多种操作系统,广泛适用于展览展示、广告内容投放、新零售、商超等领域实现各种媒…...

Elasticsearch:Query rules 疑难解答

作者:来自 Elastic Kathleen_DeRusso 查询规则(Query rules)为用户提供了一种对特定查询进行细粒度控制的方法。目前,查询规则的功能允许你将你选择的搜索结果固定在结果集的顶部,和/或根据上下文查询数据从结果集中排…...

四、VSCODE 使用GIT插件

VSCODE 使用GIT插件 一下载git插件与git Graph插件二、git插件使用三、文件提交到远程仓库四、git Graph插件 一下载git插件与git Graph插件 二、git插件使用 git插件一般VSCode自带了git,就是左边栏目的图标 在下载git软件后vscode的git插件会自动识别当前项目 …...

键盘鼠标共享工具Barrier(kail与windows操作系统)

键鼠共享工具Barrier(kail与windows操作系统)_barrier软件-CSDN博客 sudo apt install barrier...

QTcpSocket 中设置接收缓冲区大小

在 QTcpSocket 中设置接收缓冲区大小 使用setSocketOption方法 在QTcpSocket类中,可以使用setSocketOption函数来设置接收缓冲区大小。具体来说,对于 TCP 套接字,你可以使用QAbstractSocket::ReceiveBufferSizeSocketOption选项。以下是一个简…...

Arduino IDE刷微控制器并下载对应固件的原由

在使用Arduino IDE刷写某个微控制器时,下载对应的固件通常是为了确保微控制器能够正确识别和执行Arduino IDE中编写的代码。以下是对这一过程的详细解释: 一、固件的作用 固件是微控制器或嵌入式设备上运行的软件,它负责控制硬件设备的操作…...

Jurgen提出的Highway Networks:LSTM时间维方法应用到深度维

Jurgen提出的Highway Networks:LSTM时间维方法应用到深度维 具体实例与推演 假设我们有一个离散型随机变量 X X X,它表示掷一枚骰子得到的点数,求 X X X 的期望。 步骤: 列出 X X X 的所有可能取值 x i x_i xi​(…...

Netron可视化深度学习的模型框架,大大降低了大模型的学习门槛

深度学习是机器学习的一个子领域,灵感来源于人脑的神经网络。深度学习通过多层神经网络自动提取数据中的高级特征,能够处理复杂和大量的数据,尤其在图像、语音、自然语言处理等任务中表现出色。常见的深度学习模型: 卷积神经网络…...

Android客制化------7.0设置壁纸存在的一些问题

ro.wallpaper.fixsize这个节点应该是RK这边导入的,可以通过追这个节点的代码查看具体的实现方式; 最近在开7.0的坑,遇到了一些小问题,记录一下。很大可能这个问题只是我这个芯片的代码上才存在的,不过殊途同归啦。 第…...

VuePress2配置unocss的闭坑指南

文章目录 1. 安装依赖:准备魔法材料2. 检查依赖版本一定要一致:确保魔法配方准确无误3. 新建uno.config.js:编写咒语书4. 配置config.js和client.js:完成仪式 1. 安装依赖:准备魔法材料 在开始我们的前端魔法之前&…...

海陵HLK-TX510人脸识别模块 stm32使用

一.主函数 #include "stm32f10x.h" // Device header #include "delay.h" #include "lcd.h" #include "dht11.h" #include "IOput.h" #include "usart.h" //#include "adc.h" …...

安卓14无法安装应用解决历程

客户手机基本情况: 安卓14,对应的 targetSdkVersion 34 前天遇到了安卓14适配问题,客户发来的截图是这样的 描述:无法安装我们公司的B应用。 型号:三星google美版 解决步骤: 1、寻找其他安卓14手机测试…...

【Linux】传输层协议UDP

目录 再谈端口号 端口号范围划分 UDP协议 UDP协议端格式 UDP的特点 UDP的缓冲区 UDP注意事项 进一步深刻理解 再谈端口号 在上图中,有两个客户端A和B,客户端A打开了两个浏览器,这两个客户端都访问同一个服务器,都访问服务…...

玩机搞机基本常识-------列举安卓机型一些不常用的adb联机命令

前面分享过很多 常用的adb命令,今天分享一些不经常使用的adb指令。以作备用 1---查看当前手机所有app包名 adb shell pm list package 2--查看当前机型所有apk包安装位置 adb shell pm list package -f 3--- 清除指定应用程序数据【例如清除浏览器应用的数据】 …...

unity学习14:unity里的C#脚本的几个基本生命周期方法, 脚本次序order等

目录 1 初始的C# 脚本 1.1 初始的C# 脚本 1.2 创建时2个默认的方法 2 常用的几个生命周期方法 2.1 脚本的生命周期 2.1.1 其中FixedUpdate 方法 的时间间隔,是在这设置的 2.2 c#的基本语法别搞混 2.2.1 基本的语法 2.2.2 内置的方法名,要求更严…...

pytorch 比较两个张量的是否相等的函数介绍

在 PyTorch 中,可以使用多种函数来比较两个张量是否相等,具体选择取决于对比较精度的需求以及可能的数值误差。以下是常用的比较方法: 1. 完全相等的比较 (1) torch.eq 逐元素比较两个张量是否相等,返回布尔张量。 import torc…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

【Oracle APEX开发小技巧12】

有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

C++ 基础特性深度解析

目录 引言 一、命名空间(namespace) C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用(reference)​ C 中的引用​ 与 C 语言的对比​ 四、inline(内联函数…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...