首页 > 编程知识 正文

32位浮点数表示范围,浮点数规格化步骤

时间:2023-05-03 13:28:34 阅读:153742 作者:763

在以往的工作中,遇到了许多有关浮点数的问题,如浮点数的表示范围、表示精度、浮点数的存储方法、浮点数的强制类型转换等,因此我觉得有必要系统地理解浮点数的相关问题。 表示浮点数的是用于近似表示实数的公式化表达,可以进行表达范围和表达精度的权衡(因此称为浮点数)。 浮点数通常表示为: 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; 为了在提高数据显示精度的同时保证数据显示的唯一性,需要对浮点数进行归一化。 在计算机中,对于非零值的浮点数,尾数的绝对值必须大于基数的倒数,即|M|≥1/R。 也就是说,要求尾数字段的最高有效位为1,满足该显示要求的浮点数称为规范化显示。 将不满足该显示要求的尾数转换为满足该要求的尾数的操作过程称为浮点数归一化处理,通过尾数移位和修改订单号来实现。 例如,二进制码归一化数的表示形式: (0加1减) )。 加0.1xxxxx

x

负1.1

并不显相等,比如log(x), 1/+0≠1/−0。

此外,处于负下溢出和负上溢出之间的数值会被直接归为0。

(3)NAN:

如果E=0,且尾数M≠0,则表示这个值不是一个真正的值(Not A Number)。NAN又分成两类:QNAN(Quiet NAN)和SNAN(Singaling NAN)。QNAN与SNAN的不同之处在于,QNAN的尾数部分最高位定义为1,SNAN最高位定义为0;QNAN一般表示未定义的算术运算结果,如0/0, ∞×0, sqrt(−1);SNAN一般被用于标记未初始化的值,以此来捕获异常。

浮点数的表示精度

一般提到浮点数的精度(有效位数)的时候,总是会出现 float的有效位为6~7位, double的有效位为15~16位 。

下面以float为例,解释一下有效位数是怎样来的。

有效位数只和规格化浮点数的尾数部分有关,而尾数部分的位数是23位,因此我们首先列出下表

由上面的表格可以看出:

2^−23 和 2^−22 之间是存在间隔的,即0.0000001和0.0000002之间的小数我们是没有办法描述的,因此23位尾数最多只能描述到小数点后第7位;此外,我们通过四舍五入可以很容易发现0.0000003=0.0000004=2^−23+2^−22
, 这表明第7位有效数字只是部分准确。而第6位及之前的都是可以准确描述的,因此我们说float的有效位为6~7位。

 参考资料 

(1) WIKI 词条 “Floating Point”: https://en.wikipedia.org/wiki/Floating_point

(2) WIKI 词条 “IEEE floating point”: https://en.wikipedia.org/wiki/IEEE_floating_point

(2) 浮点异常值:NAN,QNAN,SNAN: 
http://www.cnblogs.com/konlil/archive/2011/07/06/2099646.html
--------------------- 
作者:shuzfan 
来源:CSDN 
原文:https://blog.csdn.net/shuzfan/article/details/53814424 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。