浮点数中单精度和双精度的编码表示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浮点数中单精度和双精度的编码表示相关的知识,希望对你有一定的参考价值。

参考技术A

计算机的世界只有0和1,为了表示浮点数,就必须要对其编码。现在大家基本上用的都是IEEE浮点编码表示,它分为单精度和双精度两种编码格式,顾名思义,双精度能表示更大的精度。

单精度占用4个字节也就是32位大小,双精度占用8个字节共64位大小。

浮点数编码成三个部分:

有了这三部分,就可以表示成这样的公式了

上面说了E和M是计算出来的,现在就来说说怎么计算

计算E
先说公式,E=e-Bias
Bias=2^(k-1)-1
拿单精度来说,阶码占用8位,那么Bias=2^(8-1)-1=127
注意 有一种特殊情况,叫做非规格化数,非规格化数也就是阶码全为0的情况,还是单精度举例,那就是8位阶码全是0,这时候就知道是非规格化数了,这时候E=1-Bias而不是0-Bias,等于-126
除了非规格化数就是用上面的公式了,比如阶码=00000011,那么E=3-127=-124

计算M
M就简单多了,主要也是分为规格化数和非规格化数情况

书中用到的是一个自己设定的8位的浮点数,第一位代表符号,中间4位代表阶码,最后3位代表尾数。首先Bias=2^(4-1)-1=7

double精确到几位小数

参考技术A

15位。

double型小数点后15位。double类型是双精度浮点数,占用8字)即64位,其精度是由32个bit的二进制尾数来确定的,因此准确精度是二进制精度而不是十进制精度,通常可以保证十进制小数点后15位有效精度。

双精度浮点数(double)是计算机使用的一种数据类型,使用64位(8字节)来存储一个浮点数。它可以表示十进制的15或16位有效数字,其可以表示的数字的绝对值范围大约是:-1.79E+308~+1.79E+308。

如果需要四舍五入,在C/C++中没有专门的函数,你可以这样实现:aStr.Format("%.2f",a+0.005);再舍去位加上5,再截断的时候就等于是四舍五入了。

Visual Basic 支持几种 Numeric 数据类型— Integer(整型)、Long(长整型)、Single(单精度浮点型)、Double(双精度浮点型)和 Currency(货币型)。与 Variant 类型相比,Numeric 类型占用的存储空间通常要少。

如果知道变量总是存放整数(如 12 )而不是带小数点的数字(如 3.57),就应当将它声明为 Integer 类型或 Long 类型。整数的运算速度较快,而且比其它数据类型占据的内存要少。在 For...Next 循环内作为计数器变量使用时,整数类型尤为有用。



以上是关于浮点数中单精度和双精度的编码表示的主要内容,如果未能解决你的问题,请参考以下文章

1 如何在 C/C++ 中编码为浮点数(假设 IEEE 754 单精度表示)?

单精度和双精度有啥不同?

MySQL 浮点数类型和定点数类型

什么是浮点数格式?

浮点数

计算机组成原理——浮点数表示方法