博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浮点型表示方法
阅读量:5335 次
发布时间:2019-06-15

本文共 1671 字,大约阅读时间需要 5 分钟。

今天在牛客刷题时,遇到了一题浮点型表示类型的题目,因为之前没接触,故记录下来。


 

浮点型的通用表达式

N=M × R 

比如: 2.3456=2.3456×101, 其中M(Mantissa):浮点数的 尾数 ,R(Radix):阶码的 基数 ,E(Exponent):阶的 阶码 。

其中,R在计算机中通过用2,8或16表示,是个不确定的常量。

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

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

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


 

浮点数的规格化表示

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

0.3×1000.3×100;0.03×1010.03×101;0.003×1020.003×102;0.0003×1030.0003×103;

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

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

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

比如,二进制原码的规格化数的表现形式:(0正1负)

正数 0.1xxxxxx

负数 1.1xxxxxx

注意,尾数的最高位始终是1,因此我们完全可以省略掉该位。比如(1)(1)×(1+0.1110 0000 0000 0000 0000 000)×2128127  中这个1在二进制中表示就会被省略

至此,我们引入IEEE754 标准,该标准约束了浮点数的大部分使用设置:(尾数用原码;阶码用“移码”;基为2)

1:尾数用原码,且隐藏尾数最高位。

原码非0值浮点数的尾数数值最高位必定为 1,因此可以忽略掉该位,这样用同样多的位数就能多存一位二进制数,有利于提高数据表示精度,称这种处理方案使用了隐藏位技术。当然,在取回这样的浮点数到运算器执行运算时,必须先恢复该隐藏位。

2:阶码使用“移码”,基固定为2

如下图的32bit浮点数和64bit浮点数,从最高位依次是符号位、阶码和尾数

 

其中32位浮点数的阶码(占8位)的范围为{-127,+127},但实际中使用的却是偏移阶码,范围是{-127,+127} + 127 = {1, 254}; 由于0不合法被省略;

于是,

一个规格化的32位浮点数x的真值为:

x=(1)s×(1.M)×2E127

一个规格化的64位浮点数x的真值为:

x=(1)s×(1.M)×2E1023

下面举一个32位单精度浮点数-3.75表示的例子帮助理解:

(1) 首先转化为2进制表示

3.75=(2+1+1/2+1/4)=1.111×21

(2) 整理符号位并进行规格化表示

1.111×21=(1)(1)×(1+0.1110 0000 0000 0000 0000 000)×21

(3) 进行阶码的移码处理 

(1)(1)×(1+0.1110 0000 0000 0000 0000 000)×21 
=(1)(1)×(1+0.1110 0000 0000 0000 0000 000)×2128127

于是,符号位S=1,尾数M为1110 0000 0000 0000 0000 000 阶码E为12810=1000 00002,则最终的32位单精度浮点数为

1  1000 0000 1110 0000 0000 0000 0000 000


 

浮点数的表示范围

通过上面的规格化表示,我们可以很容易确定浮点数的表示范围:

转载自: 

 

转载于:https://www.cnblogs.com/cnbizhen/p/9503302.html

你可能感兴趣的文章
stm32中字节对齐问题(__align(n),__packed用法)
查看>>
like tp
查看>>
posix多线程有感--线程高级编程(线程属性函数总结)(代码)
查看>>
DCDC(4.5V to 23V -3.3V)
查看>>
kettle导数到user_用于left join_20160928
查看>>
activity 保存数据
查看>>
typescript深copy和浅copy
查看>>
linux下的静态库与动态库详解
查看>>
hbuilder调底层运用,多张图片上传
查看>>
较快的maven的settings.xml文件
查看>>
Git之初体验 持续更新
查看>>
随手练——HDU 5015 矩阵快速幂
查看>>
Maven之setting.xml配置文件详解
查看>>
SDK目录结构
查看>>
malloc() & free()
查看>>
HDU 2063 过山车
查看>>
高精度1--加法
查看>>
String比较
查看>>
Django之Models
查看>>
CSS 透明度级别 及 背景透明
查看>>