浮点数的理解

来源:互联网 发布:java程序员工作业绩 编辑:程序博客网 时间:2024/06/05 21:47

1、浮点数的表示

IEEE-754

目前绝大多数语言都支持该文档,c语言里面的float,double就为该文档的32位和64位浮点。

(1)单精度浮点值

   float类型的为32位存储方式,从高位到低位的存储分别为31位是数符位,30-23位是阶码位E,在存储时真实阶码e要加上7F(H)为E,后面的22-0位是尾数M,规格化表示时默认1.M,在浮点数小于规格化表示的最小绝对值数E等于-126时,转变为非规格化表示,尾数表示0.M,采用渐近式下溢。32位通常最大3.4E38,最小1.4E-45.

(2)双精度浮点值

double类型为64位存储方式,从高位到低位的存储方式分别为63位是数符位,62-52位是阶码位E,存储时,真实阶码e要加上3FF(H)得到E,后面51-0位的52位是尾数位,同样分别规格化和非规格化表示,同上。

2、浮点数规定

(1)0的规定

以32位为例,当E和M都为0时,表示浮点数的0。由于有数符的区别,所有有+0和-0的区别,但是IEEE754规定,它们两者相等。

(2)无穷大

E=255,即指数域全1,M为0,此时表示无穷,根据数符位,分为正无穷和负无穷。除NAN(not a number)外,其他任何数除以0都是无穷。

(3)NAN(bot a number)

E=255,即指数域全1,M非0,此时表示NAN,用于处理不为无穷大的错误。

3、浮点数与实数的区别

浮点数在计算机中是离散分布和存储的,其数的个数是有限的,两数之差是确定的值,如果两个不等的浮点数的差值小于最小的浮点绝对值,那么系统将该差值视为0。

实数是连续分布的,数的个数是无限的,两数之差不会出现归零想象。

实数和浮点数之间的转换,由于浮点数精度有限,在转换的过程中可能出现精度丢失的情况。


0 0