详解浮点数

news2024/11/26 15:31:08

目录

1.什么是浮点数

2.举个例子

2.1.十进制转二进制

2.2.规范尾数位

2.3.计算指数位

2.4.拼接结果

3.精度丢失

4.JAVA中的浮点数思考


1.什么是浮点数

在计算机系统的发展过程中,曾经提出过多种方法表示实数,但是到为止使用最广泛的是浮点表示法。浮点表示法,即用浮点数来表示实数,所谓浮点数,意思是小数点的位置不是固定的,是可以浮动的。浮点数采用IEEE 754这个标准作为统一的标准。该标准中严格定义个浮点数的表示格式、转化过程。

下面简单介绍一下IEEE 754标准。

IEEE 754的核心就是用科学计数法来表示实数,然后将表示结果转为二进制的方式,方便计算机存储。

例如250,在科学计数法中表示为2.5x10^2。

可以这样来描述以上的科学计数法的结果:

+2 2.5

+是表示正负的符号位,2是指数位,2.5是开头的数。

IEEE 754将上面的这种表示思路引入计算机中适配计算机中二进制的表示法,规定浮点数的表示格式为:

位符号位 位指数位 位尾数位

本文以单精度浮点数为例(双精度只是位数的长度不一样而已),单精度浮点数的格式如下:

1位符号位 8位指数位 23位尾数位

2.举个例子

以下举一个例子,0.75用单精度浮点数表示的过程:

2.1.十进制转二进制

0.75x2=1.5,整数位为1,小数位为0.5

0.5x2=1,整数位为1,小数位为0

0.75转成二进制小数结果为0.11

2.2.规范尾数位

规范尾数位的意思是,将小数点右移,直到出现整数位不为0的时候为止,0.11规范后的结果是:

1.1

小数点右移了一位

由于有23位的空间大小,于是用0填充上:

1.100000000000000000000000

由于开头整数位一定是1,所以规范里采取了简略的表示,将整数部分略去,最后规范结果为:

100000000000000000000000

2.3.计算指数位

指数位用来表示小数点移动了多少位,也就是指数位的取值范围就决定了整个数据能表示的范围。指数位用给了8位的长度,也就是说按理说指数位最大是255,但是第一位被留作了符号位,所以能表示值的只有后七位,所以整个符号位的表示范围是-127到+127。

之所以要考虑到负的指数值,是因为小数点即要考虑到左移的情况,也要考虑到右移的情况。

比如,110.001,在规范尾数位的时候就要左移,那么指数位就应该是复数。

比如,0.11,在规范尾数位的时候就要右移,那么指数位就应该是正数。

说明白这些后,我们继续向下计算。上面一步我们将小数点右移了一位,按理说指数位的值应该是1,但规范里面这里比较特别,默认指数位的初始值不是0而是127,如果是左移1位的话就127+1,右移一位的话就是127-1。

上面我们将小数右移了1位,于是指数位是:

01111110

2.4.拼接结果

最终结果为:

0 01111110 10000000000000000000000

3.精度丢失

来看一个JAVA中浮点数精度丢失的问题:

double a=0.1;
double b=0.2;
System.out.println(a+b);

结果会是:

看完前面浮点数的转化过程,应该就能想明白了,0.1和0.2在转二进制的时候是没办法转干净。

0.1转二进制:

0.0001100110011001100110011001100110011001100110011...

0.2转二进制:

0.00110011001100110011001100110011001100110011001101...

所以将他们转浮点数后再进行运算,运算的结果转十进制输出,输出的结果一定不会是0.3。这就是一切浮点数运算中精度丢失的根本原因。

4.JAVA中的浮点数思考

为什么叫浮点数:

现在我们知道为什么JAVA中的小数叫浮点数了吧,因为就是用浮点数规范进行表示的小数。

为什么float的长度是32位:

上面我们提到过单精度浮点数的表示格式是:

1位符号位 8位指数位 23位尾数位

这里我们就能知道为什么Java的float长度为32位了。

为什么float的取值范围是正负3.4乘以10的38次方:

上面我们也提到了单精度的浮点数的指数位的取值范围是-127到+127,所以可以推导出来单精度浮点数能表示的范围是正负3.4乘以10的38次方,正好和JAVA中float的表示范围吻合。

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

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

相关文章

sqoop导出实战

Sqoop导出实战 普通导出 在Sqoop中,使用export进行导出,指的是从HDFS中导出数据到MySql中: 构建MySql的表: CREATE TABLE u2 (id int(11) DEFAULT NULL,age int(11) DEFAULT 0 ) ENGINEInnoDB DEFAULT CHARSETutf8; 复制代码 HDFS导出到MySql 第一…

LabVIEW开发基于脑机接口的航空航天相机载体

LabVIEW开发基于脑机接口的航空航天相机载体 脑机接口是人脑与外部世界之间的直接通信渠道。脑机接口是一个全新的人机界面系统。该系统获取和分析生物电信号,目标是直接在大脑和外部设备之间创建一个通信通道。计算机或微处理器的发展提高了复杂的数据处理能力。生…

SolidWorks如何批量转换文件为最新版?

对于 SOLIDWORKS 的每个新版本,文件格式都会更新以适配最新的性能升级。当您每次打开旧版本 SOLIDWORKS 文件时,都会显示一条消息,通知您这是一个较旧的文件。保存文件时,必须先将文件转换为最新版本,然后再保存。这个…

2023年5月青少年机器人技术等级考试理论综合试卷(四级)

青少年机器人技术等级考试理论综合试卷(四级)2023.6 分数: 100 题数: 30 一、 单选题(共 20 题, 共 80 分) 1.Arduino C 语言, 部分程序如下, 串口监视器输出结果是“D”时, 变量 i …

青少年和成人错误监测神经源的多模态研究

导读 儿童和成人对目标导向行为的监控能力不同,这可以通过几种任务和技术来测量。此外,最近的研究表明,错误监测的个体差异在调节焦虑情绪的倾向方面具有重要作用,而且这种调节作用会随着年龄的增长而变化。本研究使用多模态方法…

BLIP2原理解读——大模型论文阅读笔记二

一. 论文与代码 论文:https://arxiv.org/abs/2301.12597 代码:https://github.com/salesforce/LAVIS/tree/main/projects/blip2 二. 解决问题 端到端训练视觉语言模型需要大尺度模型及大规模数据,该过程成本大,本文提出方法基于…

多模态网络

目录 多模态网络概念未来网络体系研究网络管控 多模态网络概念 将多种网络技术通过可编程技术以网络模态的形式融合到多模态网络之中,力求整合多种网络优势,提升网络对多元业务的承载能力。 多模态网络中存在多种标识体系,如内容标识、身份标…

FPGA XDMA 中断模式实现 PCIE X8 OV5640摄像头视频采集 提供工程源码和QT上位机源码

目录 1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案视频采集和缓存XDMA简介XDMA中断模式QT上位机及其源码 5、vivado工程详解6、上板调试验证7、福利:工程代码的获取 1、前言 PCIE(PCI Express)采用了目前业内流行的点对点串…

ACE中TASK架构简介及简单应用

首先配置ACE环境&#xff1a; #include <iostream> #include "ace/Synch.h" #include "ace/Task.h" #include "ace/Message_Block.h" #ifdef _DEBUG #pragma comment(lib,"aced.lib") //#pragma comment(lib,"mysqlcppcon…

Python实现逻辑回归(Logistic Regression)

&#x1f4a5; 项目专栏&#xff1a;【Python实现经典机器学习算法】附代码原理介绍 文章目录 前言一、基于原生Python实现逻辑回归算法二、逻辑回归模型的算法原理三、算法实现3.1 导包3.2 定义随机数种子3.3 定义逻辑回归模型3.3.1 模型训练3.3.1.1 初始化参数3.3.1.2 正向传…

电力通信实用小技巧,一看就懂!

随着电力通信技术的快速发展&#xff0c;电力通信机房扮演着至关重要的角色&#xff0c;确保电力系统的正常运行和通信网络的稳定连接。 然而&#xff0c;电力通信机房的环境和设备面临着各种潜在的风险和挑战&#xff0c;如温度过高、湿度异常、电力故障等。为了有效监控和管理…

Canonical:我们对探索完全容器化、不可改变的Ubuntu桌面的想法感到兴奋

导读Canonical的Oliver Smith近日在一篇博文中写道&#xff0c;这个最受欢迎的GNU/Linux发行版之一背后的公司很高兴在不久的将来使用Ubuntu Core和Snaps探索完全容器化和不可变的Ubuntu桌面的想法。 在今年早些时候宣布从Ubuntu 23.04&#xff08;Lunar Lobster&#xff09;开…

计算机网络——物理层

物理层 物理层是计算机网络体系结构中的底层层级&#xff0c;负责处理计算机与物理传输媒介之间的接口和通信细节。它主要关注如何在物理媒介上传输原始比特流&#xff0c;并确保数据能够可靠地从发送方传输到接收方。 物理层的主要任务包括&#xff1a; 传输介质&#xff1a…

基于springboot的阅读系统-计算机毕设 附源码86095

基于springboot的阅读系统 摘 要 从古至今&#xff0c;阅读都是人们学习新技能&#xff0c;新知识的一种方式。随着互联网时代的到来&#xff0c;传统的纸质阅读早已满足不了人们对于阅读的渴望。在这样的大背景下&#xff0c;电子阅读便快速崛起。越来越多的人们喜欢愿意通过这…

这个传感器真的可以解决问题吗?

倒闭了 之前在文章里面写了我创业开发的猫塔&#xff0c;其中有一个问题是&#xff0c;因为猫砂重量不一致&#xff0c;磁铁老化等等问题&#xff0c;可能导致在倒砂的时候不能准确让沙仓回到正确的位置。 有个朋友在文章后面回复了一个方案&#xff0c;就是用编码器。 先简单说…

Linux网络操作实操指南:从网络配置到安全管理

目录 1. 网络配置2. 网络诊断3. 网络服务管理4. 网络安全5. 小结 Linux是一种开源的操作系统&#xff0c;具有稳定性高、安全性好、可定制性强等优点。作为一名Linux用户&#xff0c;掌握基本的Linux网络操作是非常必要的。以下是Linux网络操作的几个方面&#xff0c;包括具体的…

6款程序员实用工具,老少皆宜,你一定用得上!

从事开发行业已有4年之久&#xff0c;在此期间积累了不少好用的开发工具&#xff0c;希望帮助各位在工作上化繁为简&#xff0c;提升个人生产力。 这里的分享本着1个原则去做&#xff1a; 凡是需要重复做的&#xff0c;必须使用自动化工具来完成。 01、单元测试工具——PHPUnit…

7从0开始学PyTorch | PyTorch中求导、梯度、学习率、归一化

今天我们继续&#xff0c;接着昨天的进度。 先回顾一下上一小节&#xff0c;我学到了构建起一个模型函数和一个损失函数&#xff0c;然后我们使用人眼观察损失&#xff0c;并手动调整模型参数。然而看起来&#xff0c;我们虽然看到了损失&#xff0c;但我们调整参数的方案跟损失…

【Python学习】—认识Python与环境搭建(一)

【Python学习】—认识Python与环境搭建&#xff08;一&#xff09; 本章节思维导图如下&#xff1a; 一、Python解释器 首先一个基本原理就是&#xff1a;计算机只认识二进制&#xff0c;0和1 Python解释器&#xff0c;是一个计算机程序&#xff0c;用来翻译Python代码&…

十六、Docker Swarm的介绍和使用

一、Swarm简介 1、swarm介绍 Dockere Swarm是Docker公司推出的用来管理docker集群的编排工具&#xff0c;代码开源在https://github.com/docker/swarm&#xff0c; 它是将一群Docker宿主机变成一个单一的虚拟主机&#xff0c;提供了标准的 Docker API&#xff0c;所有任何已经与…