单精度介绍
单精度数,是指计算机表达实数近似值的一种方式。VB中,Single(单精度浮点型)变量存储为 IEEE 32 位(4 个字节)浮点数值的形式,它的范围在负数的时候是从 -3.402823E38 到 -1.401298E-45,而在正数的时候是从 1.401298E-45 到 3.402823E38 。
单精度存储格式
符号位S(sign) - 1bit
0代表正号,1代表负号。(+0、-0视为相同?(欢迎补充资料))
指数位E(exponent) - 8bit
E的取值范围为0-255(无符号整数),实际数值e=E-127。
有时E也称为“移码”,或不恰当的称为“阶码”(阶码实际应为e)
尾数位M(mantissa) - 23bit
M也叫有效数字位(significant)、系数位(coefficient), 甚至被称作“小数”。
在一般情况下,m=(1.M)2,使得实际起作用范围为1≤尾数<2。
为了对溢出进行处理,以及扩展对接近0的极小数值的处理能力,IEEE 754对M做了一些额外规定,参见后文介绍。
单精度浮点数实例
对于内部存储数据(00111111 01100110 01100110 01100110)2:
符号位
(最左侧)S=0。这表示是个正数
指数
(左侧第2-9位)E=(01111110)2=(126)10,所以s=S-127=-1。
尾数
(最后的23位)M=(1100110 01100110 01100110)2,m=(1.M)2=(1.7999999523162841796875)10
该二进制小数转为10进制的计算方式为1 + (1/2+1/4) + (1/32+1/64) + (1/512+1/1024)……
实际值
N=1.7999999523162841796875*2-1=0.89999997615814208984375
(其实,这个数据是0.9的单精度浮点数的实际内部存储,可以看到有一定的误差)
这里继续给出另外几个数字的实例:
|- 1 0 01111111 00000000000000000000000 |- 2 0 10000000 0000000000000