matlab的单精度浮点数,浮点数的表示和精度_单精度浮点数的表示

浮点数的表示和精度

如果a>0,那么1+a一定大于1吗?在数学上,答案是肯定的。但在计算机上,答案就与a的大小和浮点数的精度有关了。在matalb上,可以作以下计算:

>> a=1/2^52

a =

2.220446049250313e-016

>> 1+a>1

ans =

1

>> a=1/2^53

a =

1.110223024625157e-016

>> 1+a>1

ans =

0

可见,当a等于1/2^53时,1+a>1是不成立的。

1 浮点数

IEEE754定义了单精度浮点数和双精度数浮点数,即float和double。float有32bit,double有64bit。它们都包括符号位、指数和尾数。

符号位

指数

尾数

float

31(1)

30-23(8)

22-0(23)

double

63(1)

62-52(11)

51-0(52)

符号位有1bit,0表示正、1表示负。设一个数的指数是e,指数部分的值是bias+e。加上一个bias是为了表示负数。 float的bias是127,double的bias是1023。指数全0或全1有特殊含义,不算正常指数。

float的指数部分有8bit,可以取值1~254,减掉127,得到对应的指数范围-126~127。

double的指数部分有11位,可以取值1~2046,减掉1023,得到对应的指数范围-1022~1023。

这里的指数是以2为底的,同样尾数也是二进制的。IEEE754要求浮点数以规范形式存储,即小数点前有1位非零数字。 对于二进制数,非零数字只有1。所以IEEE754在存储时省略了这个小数点前面的1,只存储小数点后面的位。

2 误差

看个例子,设:

double a=0.2;

在PC上,我们可以

你可能感兴趣的:(matlab的单精度浮点数)