【计组】32位浮点数的表示范围以及如何解决精度缺失

简介: 【计组】32位浮点数的表示范围以及如何解决精度缺失

1 浮点数的定义


提及浮点数,脑中必然会联想到定点数。所以首先我们看下两者的定义,一探究竟。


在计算机中,数据有两种表达方式:定点数和浮点数,注意,这仅仅是数的两种表达方式,而不是两种数。


1、定点数:

定点数指小数点在数中的位置是固定不变的,通常有定点整数和定点小数。在对小数点位置作出选择之后,运算中的所有数均应统一为定点整数或定点小数,在运算中不再考虑小数问题。

(1)定义:数据中小数点位置固定不变的数

(2)种类:定点整数

(3)小数点在符号位与有效位之间。

注:定点数受字长的限制,超出范围会有溢出。


2、浮点数:

浮点数中小数点的位置是不固定的,用阶码和尾数来表示。通常尾数为纯小数,阶码为整数,尾数和阶码均为带符号数。尾数的符号表示数的正负;阶码的符号则表明小数点的实际位置。

(1)形式:N=M×2E

(2)M:尾数

(3)E:阶码

(4)在计算机中M和E表示形式为

阶码 尾数符号 尾数

将其与数学中的科学记数法进行比较。

注:其浮点数的精度由尾数决定,数的表示范围由阶码决定。


2 为什么要使用浮点数?


定点数的表示范围固定、有限。比如使用8位十进制来表示一个整数。

  • 最大:999999999
  • 最小:000000000


如果我们想要表示更大的一个数,便无从下手。所以数学中我们一般采用科学计数法来进行简化表示。


在计算机里,我们也可以用一样的办法,用科学计数法来表示实数。浮点数的科学计数法的表示,有一个 IEEE 的标准,它定义了两个基本的格式。一个是用 32 比特表示单精度的浮点数,也就是我们常常说的 float 或者 float32 类型。另外一个是用 64 比特表示双精度的浮点数,也就是我们平时说的 double 或者 float64 类型。双精度类型和单精度类型差不多,这里,我们来看单精度类型,双精度你自然也就明白了。

image.png


3 32位浮点数表示范围


image.png


关于最小数与最大数的表示,第一次学到这部分时,有些不理解。


最大数举例

image.png

注:理解的关键点在于尾数以及对应2进制指数转为十进制表示。


4 浮点数的精度缺失


image.png

public class FloatPrecision {
  public static void main(String[] args) {
    float a = 20000000.0f;
    float b = 1.0f;
    float c = a + b;
    System.out.println("c is " + c);
    float d = c - a;
    System.out.println("d is " + d);
  }
}


对应的输出结果就是:

c is 2.0E7
d is 0.0


应对精度丢失,我们可以使用Kahan Summation算法,令结果更为精确。

目录
相关文章
|
1月前
LabVIEW为什么浮点数会丢失精度
LabVIEW为什么浮点数会丢失精度
17 2
|
1月前
|
语音技术 Python
量化模型是将浮点数运算转换为整数运算的过程
【2月更文挑战第32天】量化模型是将浮点数运算转换为整数运算的过程
22 1
|
11月前
|
前端开发 Java
项目采坑日志——Java浮点类型数据进行加减运算出现精度丢失问题
项目采坑日志——Java浮点类型数据进行加减运算出现精度丢失问题
124 0
|
Python
一日一技:为什么浮点数在计算机中可能不准确?
一日一技:为什么浮点数在计算机中可能不准确?
64 0
|
PHP 开发者
错误抑制运算| 学习笔记
快速学习错误抑制运算。
82 0
|
Web App开发 缓存 前端开发
数值千分位,6种方法和性能对比,值得一看
前端嘛,经常处理数值和时间。 所以数值和时间的格式化少不了。 最近一直在面试前端, 就出了一个如何给数值添加千分位的面试题。 至于答案,, 一是基于你现有的知识实现, 二是知识面。 有人说, 不就一个千分位, 分分钟解决你, 正则万岁。 没错, 正则很帅, 那么性能呢? 好了, 进入正文。
346 0
数值千分位,6种方法和性能对比,值得一看
|
算法 搜索推荐
漫画算法:找出缺失的整数
题目:一个无序数组里有99个不重复正整数,范围从1到100,唯独缺少一个整数。如何找出这个缺失的整数?
130 0
漫画算法:找出缺失的整数
|
算法
【计算理论】计算复杂性 ( 多项式时间规约 | NP 完全 ★ | 布尔可满足性问题 ) ★
【计算理论】计算复杂性 ( 多项式时间规约 | NP 完全 ★ | 布尔可满足性问题 ) ★
259 0
【计算理论】计算复杂性 ( 多项式时间规约 | NP 完全 ★ | 布尔可满足性问题 ) ★
|
存储 架构师
阿里P8级架构师怎么处理电商业务中的数值计算的精度/舍入/溢出问题?(下)
阿里P8级架构师怎么处理电商业务中的数值计算的精度/舍入/溢出问题?
220 0
阿里P8级架构师怎么处理电商业务中的数值计算的精度/舍入/溢出问题?(下)
|
前端开发 数据挖掘
计算与推断思维 十六、比较两个样本
十六、比较两个样本 原文:Comparing Two Samples 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 最近邻分类方法的动机是这样的,个体可能像最近的邻居。
916 0