当前位置:首页 > 上门服务 >

单精度浮点数通俗解释(单精度浮点数举例)

来源:原点资讯(www.yd166.com)时间:2023-12-01 08:50:23作者:YD166手机阅读>>

大家好,我是站长 polarisxu。

团队一直保持着分享的习惯,而我却分享的较少。忘了当时同事分享什么主题,涉及到浮点数相关知识。于是我决定分享一期关于浮点数的,而且 Go 之父 Rob Pike 说不懂浮点数不配当码农。。。So?!

单精度浮点数通俗解释,单精度浮点数举例(1)

本着「要学习就系统透彻的学」这个原则,本文通过图的方式尽可能详细的讲解浮点数,让大家能够对浮点数有一个更深层次的认识。

本文目录:

单精度浮点数通俗解释,单精度浮点数举例(2)

0、几个问题

开始之前请思考如下问题:

  • 二进制 0.1,用十进制表示的话是多少?十进制的 0.1,用二进制表示又是多少?
  • 为什么 0.1 0.2 = 0.30000000000000004?
  • 单精度和双精度浮点数的有效小数位分别是多少?
  • 单精度浮点数能表示的范围是什么?
  • 浮点数为什么会存在 -0?infinity 和 NaN 又是怎么表示的?

如果现在不会,那这篇文章正好可以为你解惑。

1、什么是浮点数

我们知道,数学中并没有浮点数的概念,虽然小数看起来像浮点数,但从不这么叫。那为什么计算机中不叫小数而叫浮点数呢?

因为资源的限制,数学中的小数无法直接在计算机中准确表示。为了更好地表示它,计算机科学家们发明了浮点数,这是对小数的近似表示。维基百科中关于浮点数的概念说明如下:

The term floating point refers to the fact that a number's radix point (decimal point, or, more commonly in computers, binary point) can float; that is, it can be placed anywhere relative to the significant digits of the number.

也就是说浮点数是相对于定点数而言的,表示小数点位置是浮动的。比如 7.5 × 10、0.75 × 10² 等表示法,值一样,但小数点位置不一样。

具体来说,浮点数是指用符号、尾数、基数和指数这四部分来表示的小数。

单精度浮点数通俗解释,单精度浮点数举例(3)

2、IEEE754 又是什么

知道了浮点数的概念,但需要确定一套具体的表示、运算标准。其中最有名的就是 IEEE754 标准。William Kahan 正是因为浮点数标准化的工作获得了图灵奖。

The IEEE Standard for Floating-Point Arithmetic (IEEE 754) is a technical standard for floating-point arithmetic established in 1985 by the Institute of Electrical and Electronics Engineers (IEEE). The standard addressed many problems found in the diverse floating-point implementations that made them difficult to use reliably and portably. Many hardware floating-point units use the IEEE 754 standard.

本文的讨论都基于 IEEE754 标准,这也是目前各大编程语言和硬件使用的标准。

根据上面浮点数的组成,因为是在计算机中表示浮点数,基数自然是 2,因此 IEEE754 浮点数只关注符号、尾数和指数三部分。

3、小数的二进制和十进制转换

为了方便后面的内容顺利进行,复习下二进制和十进制的转换,其中主要涉及到小数的转换。

二进制转十进制

和整数转换一样,采用各位数值和位权相乘。比如:

(0.101)₂ = 1×2⁻¹ 0×2⁻² 0×2⁻³ = (0.625)₁₀

记住小数点后第一位是从 -1 开始即可。

十进制转二进制

十进制整数转二进制采用“除 2 取余,逆序排列”法。例如十进制数 11 转为二进制:

11/2=5…余1 5/2=2…余1 2/2=1…余0 1/2=0…余1

所以 (11)₁₀ 的二进制是 (1011)₂。

但如果十进制是小数,转为二进制小数如何做?采用“乘 2 取整,顺序排列”。例如十进制小数 0.625 转为二进制小数:

0.625*2=1.25…取整数部分1 0.25*2=0.5…取整数部分0 0.5*2=1…取整数部分1

顺序排列,所以 (0.625)₁₀ = (0.101)₂。

为了方便大家快速的做转换,网上有很多这样的工具。推荐一个我觉得最棒的:https://baseconvert.com/,支持各进制的转换,还支持浮点数。

4、经典问题:0.1 0.2 = 0.30000000000000004

这个问题网上相关的讨论很多,甚至有专门的一个网站:https://0.30000000000000004.com/,这个网站上有各门语言的 0.1 0.2 的结果。比如 C 语言:

#include<stdio.h> intmain(intargc,char**argv){ printf("%.17f\n",.1 .2); return0; }

Go 语言:

packagemain import( "fmt" ) funcmain(){ vara,bfloat64=0.1,0.2 fmt.Println(a b) }

结果都是 0.30000000000000004。

为什么会这样?这要回到 IEEE754 标准关于浮点数的规定。

5、浮点数的 IEEE754 表示

上文提到,浮点数由四个部分构成,那 IEEE754 标准是如何规定它们的存储方式的呢?

一般地,IEEE754 浮点数有两种类型:单精度浮点数(float)和双精度浮点数(double),还有其他的,不常用。单精度浮点数使用 4 字节表示;双精度浮点数使用 8 字节表示。在 Go 语言中用 float32 和 float64 表示这两种类型。

单精度浮点数通俗解释,单精度浮点数举例(4)

栏目热文

十进制与ieee754标准转换原理(将ieee754标准转换为十进制)

十进制与ieee754标准转换原理(将ieee754标准转换为十进制)

本文功能:浮点数0.1 0.2 不等于 0.3的前置知识点我们知道js存储number类型的数据采用的是IEEE 7...

2023-12-01 08:58:05查看全文 >>

将十进制转换为ieee754标准浮点数(十进制转浮点数的方法)

将十进制转换为ieee754标准浮点数(十进制转浮点数的方法)

1 什么是比特?比特(bit,binary digit的缩写)中文翻译为“二进位数字”、“二进位” 或简称为 “位”。比...

2023-12-01 08:31:35查看全文 >>

ieee 754标准规定的32位浮点数(ieee32位浮点数计算器)

ieee 754标准规定的32位浮点数(ieee32位浮点数计算器)

在AI中常提32位浮点数、16位浮点数,混合精度。。这里重点说一下32位浮点数的表示先来一张图浮点数的计算方式其中s是符...

2023-12-01 09:03:03查看全文 >>

怎么用ieee754表示单精度浮点数(ieee 754浮点数怎么换算成16进制)

怎么用ieee754表示单精度浮点数(ieee 754浮点数怎么换算成16进制)

我们日常使用的各类数据,都是以二进制的方式存储的。以浮点数为例,在PLC中其表示方式使用了IEEE 754标准。许多编程...

2023-12-01 08:56:40查看全文 >>

ieee浮点数表示方法(ieee单精度浮点数转换十进制)

ieee浮点数表示方法(ieee单精度浮点数转换十进制)

In a floating-point representation, a value’s binary point i...

2023-12-01 09:03:53查看全文 >>

单精度浮点数报文举例(单精度浮点数的例子)

单精度浮点数报文举例(单精度浮点数的例子)

Modbus协议存在用于串口、以太网、专用网络的版本。各版本的Modbus通信协议在数据模型和功能调用上都是相同的,只有...

2023-12-01 09:10:27查看全文 >>

ieee754尾数用什么表示(如何用ieee754标准表示一个浮点数)

ieee754尾数用什么表示(如何用ieee754标准表示一个浮点数)

浮点数在计算中如何存储?浮点数在计算机中是如何存储的你知道吗?IEEE754是计算机浮点数格式标准,S代表符号位,0为正...

2023-12-01 09:05:29查看全文 >>

单精度浮点数的正负(单精度浮点数中阶符如何确定)

单精度浮点数的正负(单精度浮点数中阶符如何确定)

引言在计算机中,浮点数和定点数是常用的数值表示方法,用于处理和表示实数(包括小数)的数值。它们在计算机中具有不同的特点和...

2023-12-01 08:32:08查看全文 >>

ieee单精度浮点数与定点数的区别(ieee32位浮点数计算器)

ieee单精度浮点数与定点数的区别(ieee32位浮点数计算器)

1、定点运算:“定点数”就是“点”不动的数,即“小数点”不变的数。整数的小数点表示在最后一位数字的后面,而小数的小数点标...

2023-12-01 09:11:48查看全文 >>

怪物猎人物语大空基因搭配(怪物猎人物语1.3基因搭配大全)

怪物猎人物语大空基因搭配(怪物猎人物语1.3基因搭配大全)

游信特邀作者:白夜《怪物猎人物语2:毁灭之翼》是今年继《怪物猎人:崛起》以及《生化危机8》之后的又一部卡普空游戏作品。不...

2023-12-01 09:09:09查看全文 >>

文档排行