计算机中实数的比较

news2024/12/25 22:16:21

计算机中实数的比较

最近被问到了实数与0为什么不能直接比较的问题,要想说清楚还真不容易。

这里从浮点数的表示、内存存储角度加以总结。

科学计数法

科学计数法表示十进制数的浮点数遵循了小数点前面只有一个数(1~9的规则。

例如:

0.75的科学计数法为 

 。

浮点数在内存中的存储

根据IEEE国际标准,任意一个二进制浮点数可以表示为下面的形式:

-1^S*M*2^E

 (-1)^S表示符号位,当S=0时,表示正数,当S=1时,表示负数。

M表示有效数字,大于等于1,小于2。

2^E表示指数位。

二进制浮点数1011.0011的科学计数法为

IEEE 745规定:

对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位为有效数字M。

对于32位的浮点数,最高的1位是符号位S,接着的8位是指数E,剩下的23位为有效数字M。

https://pic3.zhimg.com/80/v2-1bd1f22311e88d79e502560fe2d84c8e_720w.webp

有效数字M

1<M<2,也就是说,M写成1.xxxxxxx的形式,其中xxxxxxx表示小数部分。

而为了扩大M的取值范围,增加它的位数,IEEE 754规定,在计算机内部保存M时,因为浮点数的第一位总是1,可以被舍去,只保存小数部分,而在取出来时在添上。比如保存1.011时,只保存011,后面的位数补0就可以了,等到读取的时候,再把第一位的1补上去。

指数E:

首先,E为一个无符号整数(unsigned int)

如果E为8位,它的取值范围为0~255;如果E为11位,它的取值范围为0~2047。但是,我们知道,科学计数法是可以出现负数的,所以IEEE 754又规定,存入内存的E是真实值加上一个中间数,对于8位的E,中间数是127,对于11位的E,中间数是1023比如,2^2的E是2,所以保存为32位浮点数时,必须保存为2+127=129,即10000001。

两种特殊情况:

E全为0

E的二进制为全为0代表原来的E是-127,这意味着什么,2的127次方是一个无穷大的数,而1再除以127说明这个数已经无限趋近与0了。这时,浮点数的指数E等于1-127(或1-1023)即为真实值,有效数字M不再加上第一位的1,而是还原为0.xxxxxxx的小数。这样做是为了表示正负零,以及接近于0的很小的数字。

E全为1

E的2进制全为1,11111111,也就是原来的E值为128,2的128次方是一个很大的数,因此我们也认为,有效数字M不再加上第一位的1,再加上符号位S,就表正负无穷大的数字了。

精度损失

计算机只识别0和1,而2的指数次幂不可能表示到所有的数,所以在浮点数存储时,不可能完全与原来的数一模一样。

因为M只有23位,而0.1的二进制远远不止23位,会发生截断,只取23位,这也就是为什么浮点型存储会有精度损失。

而精度损失造成的后果可能会变大也可能会变小,因为在存储截断也可能会发生四舍五入进位。

两个浮点数的比较

因为精度损失,两个浮点数也就不能用==来进行比较

而是通过两个浮点数差值的绝对值是否小于某个预先设定的误差值来判断。

浮点数与0的比较

一个浮点数减去0再与预设的误差相比就能判定是否等于0。

学习引用:

细谈浮点数与0的比较

细谈浮点数与0的比较_浮点数与0比较_海绵宝宝养的的小窝的博客-CSDN博客

float数据的计算近似问题

float数据的计算近似问题 - 知乎

特别感谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1038220.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python+nodejs+php+springboot+vue 法律知识分享科普系统平台

在设计过程中&#xff0c;充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 要想实现法律知…

93 # 实现 express 错误处理中间件

上一节实现了 express 的中间件&#xff0c;这一节来实现错误处理中间件 执行某一步出错了&#xff0c;统一规定调用 next 传递的参数就是错误信息 先看 express 实现的demo const express require("express"); const app express();app.use("/", (re…

2023-09-23 Windows系统rust开发环境配置真经

Windows系统rust开发环境配置真经 前言一、配置C编译链和VsCode二、安装rust编译工具三、配置VsCode一. 安装rust-analyzer插件二. 安装Error Lens插件三. 安装Even Better TOML插件四. 配置 launch.json五. 配置 tasks.json六. 配置 Cargo.toml 总结 前言 有了配置C语言环境的…

腾讯mini项目-【指标监控服务重构】2023-08-27

今日已办 Docker Monitoring with cAdvisor, Prometheus and Grafana Docker Monitoring with cAdvisor, Prometheus and Grafana | by Mertcan Simsek | MediumMonitoring Docker container metrics using cAdvisor | Prometheus prometheus.yml global:scrape_interval: …

Linux下安装使用Redis

1.进入/usr/local目录&#xff0c;新建一个目录redis&#xff0c;下载redis安装包 wget https://download.redis.io/releases/redis-6.2.6.tar.gz**并解压 tar xzf redis-6.2.6.tar.gz进入redis-6.2.6目录 cd redis-6.2.6用make来编译 make2.启动redis: ./src/redis-server…

Vue-devTools安装—创建项目方法2 ui创建——Vue指令综合案例——汽车品牌管理

目录 项目源代码&#xff1a; 一、vue-devTools安装 二、案例功能实现 1、新建项目&#xff08;ui创建&#xff09; 2、cnpm导入项目依赖库 3、删除不需要的代码结构: 4、修改代码结构 5、添加汽车品牌 插件安装 bootstrap的提示功能 添加bootstrap样式 6、删除汽车品牌…

ndoe.js、npm相关笔记

1、npm 全局安装 npm config get prefix 获取 npm 全局安装路径如果全局插件不能正常使用&#xff0c;看环境变量是否已经配置。没有配置则把全局安装路径配置到环境变量的path中

【golang】调度系列之sysmon

调度系列 调度系列之goroutine 调度系列之m 调度系列之p 在golang的调度体系中&#xff0c;除了GMP本身&#xff0c;还有另外一个比较重要的角色sysmon。实际上&#xff0c;除了GMP和sysmon&#xff0c;runtime中还有一个全局的调度器对象。但该对象只是维护一些全局的数据&…

高云FPGA系列教程(10):letter-shell串口终端移植

文章目录 1. letter-shell简介2. letter-shell源码获取3. letter-shell移植4. 函数和变量应用示例本文是高云FPGA系列教程的第10篇文章。 shell,中文是外壳的意思,就是操作系统的外壳。通过shell命令可以操作和控制操作系统,比如Linux中的Shell命令就包括ls、cd、pwd等等。总…

leetcode100----双指针

283. 移动零 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1:输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2:输入: nums …

英飞凌TC3xx--深度手撕HSM安全启动(六)--安全启动的TARA、HARA分析

在之前我们讲解基于Tricore的安全启动流程,但是是不是这种流程就是安全可靠的呢?不确定,因此对启动流程基于信息安全的TARA分析基和于功能安全的HARA分析必不可少。 1、安全启动的TARA分析 首先我们来看看什么叫做TARA分析。 在ISO\SAE 21434 中对于TARA描述为threat analy…

浅析工具dirpro v1.2源码

文章目录 前言源码分析dirpro.pystart.pybackup.pyrely.pyresults.pyend.py 前言 工具简介 dirpro 是一款由 python 编写的目录扫描器专业版&#xff0c;操作简单&#xff0c;功能强大&#xff0c;高度自动化 自动根据返回状态码和返回长度&#xff0c;对扫描结果进行二次整理…

【动手学深度学习-Pytorch版】注意力汇聚:Nadaraya-Watson 核回归

注意力机制中的查询、键、值 在注意力机制的框架中包含了键、值与查询三个主要的部分&#xff0c;其中键与查询构成了注意力汇聚&#xff08;有的也叫作注意力池化&#xff09;。 键是指一些非意识的线索&#xff0c;例如在序列到序列的学习中&#xff0c;特别是机器翻译&…

基于Python+Django的热门旅游景点数据分析系统的设计与实现(源码+lw+部署文档+讲解等)

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…

JAVA:实现Excel和PDF上下标

1、简介 最近项目需要实现26个小写字母的上下标功能,自己去网上找了所有Unicode的上下标形式,缺少一些关键字母,顾后面考虑自己创建上下标字体样式,以此来记录。 2、Excel Excel本身是支持上下标,我们可以通过Excel单元格的样式来设置当前字体上下标,因使用的是POI的m…

YOLOv5:修改backbone为ACMIX

YOLOv5&#xff1a;修改backbone为ACMIX 前言前提条件相关介绍ACMIXYOLOv5修改backbone为ACMIX修改common.py修改yolo.py修改yolov5.yaml配置 参考 前言 记录在YOLOv5修改backbone操作&#xff0c;方便自己查阅。由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评…

【软件设计师-从小白到大牛】上午题基础篇:第四章 法律法规与知识产权

文章目录 前言章节提要一、保护期限真题链接 二、知识产权人确定真题链接 三、侵权判定真题链接 四、标准化基础知识 前言 ​ 本系列文章为观看b站视频以及b站up主zst_2001系列视频所做的笔记&#xff0c;感谢相关博主的分享。如有侵权&#xff0c;立即删除。 视频链接&#xf…

Qt5开发及实例V2.0-第二十三章-Qt-多功能文档查看器实例

Qt5开发及实例V2.0-第二十三章-Qt-多功能文档查看器实例 第23章 多功能文档查看器实例23.1. 简介23.2. 界面与程序框架设计23.2.1. 图片资源23.2.2. 网页资源23.2.3. 测试用文件 23.3 主程序代码框架23.4 浏览网页功能实现23.4.1 实现HtmIHandler处理器 23.5. 部分代码实现23.5…

git 本地分支基础操作

&#xff08;1&#xff09;建立分支 a:基于某个commit建立分支 然后切换 git branch test_branch 6435675ad32c035ed4d9cb6c351de5cbaecddd99 git checkout test_branchb: git checkout 建立分支然后切换 git checkout -b checkout_branchc:分支建立 然后切换 git branch …

【Amazon】AI 代码生成器—Amazon CodeWhisperer初体验 | 开启开挂编程之旅

使用 AI 编码配套应用程序更快、更安全地构建应用程序 文章目录 1.1 Amazon CodeWhisperper简介1.2 Amazon CodeWhisperer 定价2.1 打开VS Code2.2 安装AWS ToolKit插件 一、前言 1.1 Amazon CodeWhisperper简介 1️⃣更快地完成更多工作 CodeWhisperer 经过数十亿行代码的训…