IEEE754标准
source from https://www.hello-algo.com/🚀
Last updated
Was this helpful?
source from https://www.hello-algo.com/🚀
Last updated
Was this helpful?
记一个 32 比特长度的二进制数为:
根据 IEEE 754 标准,32-bit 长度的 float
由以下三个部分构成。
符号位 :占 1 位 ,对应 。
指数位 :占 8 位 ,对应 。
分数位 :占 23 位 ,对应 。
二进制数 float
对应值的计算方法为:
转化到十进制下的计算公式为:
其中各项的取值范围为:
尽管浮点数 float
扩展了取值范围,但其副作用是牺牲了精度。整数类型 int
将全部 32 比特用于表示数字,数字是均匀分布的;而由于指数位的存在,浮点数 float
的数值越大,相邻两个数字之间的差值就会趋向越大。
次正规数
正规数
正规数
观察上图,给定一个示例数据 , , ,则有:
现在我们可以回答最初的问题:float
的表示方式包含指数位,导致其取值范围远大于 int
。根据以上计算,float
可表示的最大正数为 ,()切换符号位便可得到最小负数。
如下表所示,指数位 和 具有特殊含义,用于表示零、无穷大、 等。
值得说明的是,次正规数显著提升了浮点数的精度。最小正正规数为 ,最小正次正规数为 。双精度 double
也采用类似于 float
的表示方法,在此不做赘述。