浮点数表示方法

浮点数表示方法,第1张

浮点数是一种公式化的表达方式,用来近似表示实数,并且可以在表达范围和表示精度之间进行权衡(因此被称为浮点数)。

浮点数通常被表示为:

N=M×R^E

比如:12.345=1.2345×10^1

其中,M(Mantissa)被称为浮点数的 尾数 ,R(Radix)被称为阶码的 基数 ,E(Exponent)被称为阶的 阶码 。计算机中一般规定R为2、8或16,是一个确定的常数,不需要在浮点数中明确表示出来。

因此,在已知标准下,要表示浮点数。

一是要给出尾数M的值,通常用定点小数形式表示,它决定了浮点数的表示精度,即可以给出的有效数字的位数。

二是要给出阶码,通常用定点整数形式表示,它指出的是小数点在数据中的位置,决定了浮点数的表示范围。因此,在计算机中,浮点数通常被表示成如下格式:(假定为32位浮点数,基为2,其中最高位为符号位)。

浮点数的规格化表示

按照上面的指数表示方法,一个浮点数会有不同的表示:

0.3×10^0;0.03×10^1;0.003×10^2;0.0003×10^3。

为了提高数据的表示精度同时保证数据表示的唯一性,需要对浮点数做规格化处理。

在计算机内,对非0值的浮点数,要求尾数的绝对值必须大于基数的倒数,即|M|≥1/R。

即要求尾数域的最高有效位应为1,称满足这种表示要求的浮点数为规格化表示:把不满足这一表示要求的尾数,变成满足这一要求的尾数的操作过程,叫作浮点数的规格化处理,通过尾数移位和修改阶码实现。

ieee754标准的32位浮点规格化数是00111110110110000000000000000000。

第一,先转换为二进制数,第二,转化为规格化数,第三,按1823转化。

27/64=0.421875用二进制数表示为0.011011=1.1011×e^(-2)。

E=e+127=125用二进制数表示为01111101。

M=1011。

S=0。

SEM即:00111110110110000000000000000000。

单精度浮点数极值情况规定,最大的非规约数实际指数为-126,有偏移指数为0,指数域为00000000;最大的规约数实际指数为127,有偏移指数为254,指数域为11111110。

IEEE754标准的相关要求规定:

1、对于一个数,其二进制科学计数法表示下的指数的值,为指数的实际值;而根据IEEE 754标准对指数部分的编码的值,为浮点数表示法指数域的编码值。

2、指数偏差(表示法中的指数为实际指数减掉某个值)为 ,其中的e为存储指数的比特的长度。减掉一个值为指数必须是有号数才能表达很大或很小的数值,但是有号数通常的表示法——补码,将会使比较变得困难。

计算机组成原理:

若不对浮点数的表示作出明确规定,同一个浮点数的表示就不是唯一的。例如,十进制数可以表示成1.11×100,0.111×101,0.0111×102等多种形式。

整数部分:

小数部分:

例如:浮点数 4.8125

整数部分:

小数部分:

将整数与小数部分连接起来就是 100.1101 ,即 =

再如:浮点数 0.05

因为只有小数所以只处理小数部分:

可以看到二进制小数是无法准确表示浮点数的,所以就有了精度一说.

单精度浮点数用32位二进制表示如下:

双精度浮点数用64位二进制表示如下:

由上可知,

单精度浮点数精度为 pow(2,23) = 8388608 = 0.8388608 x pow(10,7)

所以单精度浮点数对应的10进制精度为 7 位多

双精度浮点数精度为 pow(2,52)-1 = 4503599627370496 = 0.4503599627370496 x pow(10,16)

所以双精度浮点数对应的10进制精度为 16 位多

移码(又叫增码)是由补码的符号位取反得到,一般用指数的移码减去1来做浮点数的阶码,

引入的目的是便于浮点数运算时的对阶操作。为了保证浮点数的机器零为全0。

对于定点整数,计算机一般采用补码的来存储。

正整数的符号位为 0,反码、补码、原码都一样。

负整数的符号位为 1,原码、反码和补码的表示各不相同,

由原码变成反码和补码有如下规则:

浮点数二进制表示:

比如十进制4.5的单精度浮点数的二进制 =表示为上述公式则为

看到这里的 E 为 2 ,那么它在计算机实际存储为 2 + 127 = 129 =

根据上面的公式各部分表示的规则得到一个32位浮点数表示如下表:

符号位为 0 表示是正数,所以 4.5 的二进制存储为 0 10000001 00100000000000000000000 ,即 = 0x40900000

以下 tool.c 是一个测试工具:

下面是我们把上述二进制转为二进制浮点数

如果得到阶码是负数比如下面的 0.5 和 0.05 ,规则是先在首位补 1 ,然后向左移动小数点,不够补 0

综上我们知道

阶码为正小数点 右移 ,先移动小数点再补 1 。

阶码为负小数点 左移 ,先补 1 再移动小数点,不足补 0

二进制浮点数转10进制浮点数,这里是单精度,双精度同理

根据公式定义:

0.15625 二进制表示如下:

转换如下:

IEEE754 Wiki

单精度浮点数

双精度浮点数

浮点数表示

二进制浮点数在线转换


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/414881.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存