浮点数:浮点数在内存中的存放

一、浮点数的概念引入

在计算机中的数据有定点数和浮点数两种表示方式。

1. 定点数是指小数点固定在某个位置上的数据,一般有小数和整数两种表示形式。

定点小数:将小数点固定在数据数值部分的左边,符号位的右边。

定点整数:将小数点固定在数据数值部分的右边。

定点数表示法简单直观,但数值表示范围小,运算时容易产生溢出。

2. 为弥补定点数表示范围的不足,防止溢出,发明了浮点表示法。

浮点数是指小数点位置可浮动的数据。

浮点数标准是采用的IEEE标准754,是一种类似于科学计数法的表示法。

3. 科学计数法

任何一个数可以通过科学计数法表示为

其中:

1 10,即不论正负数,a的整数部分只能有一位。(这和浮点数的表示方法一致)

n为整数。

10为基数,为约定值。

Eg:-12345.69的科学计数法表示过程为:

由于1 10,所以小数点必须向左移动4位,即a=-1.234569n=+4

所以其科学计数法表示形式为-1.234569×

同理,0.0001234569的科学计数法表示过程:

小数点必须向右移动4位,即a=1.234569n=-4

所以其科学计数法表示形式为 1.234569×

4、移码的概念

当阶码为n+1位时,其最高位为符号位,

X为原码)

注意这个和IEEE中的偏码不一样。

移码其实就是将补码的符号位取反,这样使得浮点数的机器0(当数据小于机器所能表示的最小数时≤- )为全0

而数据0的表示为

二、IEEE标准754

1. IEEE标准754中规定了三种浮点数格式:单精度、双精度、扩展精度。此处以单精度为例。

单精度浮点数N是一个32位的由01组成的位序列,其格式图如下:

S

E

M

其中:

S:为符号位

E:为指数位,也称阶码,用移码表示。指明小数点在浮点数中的范围。决定了浮点数的表示范围。

M:为尾数位。决定了浮点数的精度。

若以s,e,m,n分别表示S,E,M,N的实际数值,则

2. em的计算

M

如同科学计数法一样,m的整数位也只能有一位,所以m只能为10,绝大多数情况下,都是为1,除非n值非常小。既然绝大多数情况下为1,那么该位即可省略,而且扩大了精度,一举两得。所以M的位序列只可能为1.00010110.0110100,如果m的整数位不是一位,则需要左右移动小数点并同时改变阶码值以达到这一要求的形式,这也称为浮点数的格式化表示。

特殊情况:①当一个浮点数的尾数为0时,不论其阶码为何值

②当阶码的值遇到比它能表示的最小值还小时,不管其尾数值为何值

这两种情况都把该浮点数视为0,称为机器0

就是这个数实在是太小了,小数点一直往右移也一直没碰到1,直到达到了阶码能表示的最小值,这样的数则认为是0

E

单精度浮点数E的位数为8位,除去阶符,其能表达的范围为

例:

将十进制浮点数-321.456转换成二进制表示。

负数,所以s=1

将整数部分321转换为二进制101000001,小数部分0.456转换为二进制,即乘上2,若进位则置1。转着转着发现一直难以达到1,这便是浮点数的精度问题,不管他,取150. 011101001011110,和整数部分合在一起凑成24位:

101000001.011101001011110,进行格式化,将小数点左移8位,则|E|=127+8=135

E=10000111,M=01000001011101001011110,S=1

最后将三者合在一起,得到浮点数的二进制表示

1100 0011 1010 0000 1011 1010 0101 1110

化作16进制为C3 A0 BA 5E

倒过来,已知一个位序列,求出对应的十进制数。

已知位序列为1100 0011 1010 0000 1011 1010 0101 1110

可确定s=1

e=(100 0011 1)-127=8

m=|1. 010 0000 1011 1010 0101 1110|=1+2^(-2)+ 2^(-8)+ 2^(-10)+ 2^(-11)+ 2^(-12)+ 2^(-14)+ 2^(-17)+ 2^(-19)+ 2^(-20)+ 2^(-21)+ 2^(-22)

=1+0.25+0.0000002384185791015625(1+2+4+8+32+256+1024+2048+4096+16384)

=1.255687

所以n=(-1)^1+1.255687*2^8=321.45599

Tags:  单精度浮点数 什么是浮点数 浮点数例外 浮点数

延伸阅读

最新评论

发表评论