IEEE浮点标准

IEEE二进位浮点数算术标准

浮点数是指用符号位(正数为0,复数为1),指数,有效数字位来表示的小数。有单精度(32)和双精度表示(64)。

[图片上传失败...(image-d17584-1530461049799)]

浮点数0.75单精度示例

  • 计算符号位
    0.75是正数,所以符号位为0.

  • 计算阶码

    • 0.75用二进制表示是0.11,转为科学计数法就是1.1*2-1(Note:必须将浮点数转为1.xxx*2e然后来计算阶码。)
    • 上一步将0.75转为二进制的科学计数法1.1*2-1,指数是-1,通过-1来计算阶码,IEEE标准是这样规定的,8位代表阶码为,最大值是11111111=255,这里255的1/2,即01111111=127表示0,那么1.1*2-1的指数-1是用126=01111110来表示,所以阶码=01111110=126
  • 计算有效数字

    从计算阶码一步0.75用二进制科学计数法1.1*2-1,1.1小数点之后的则是有效数字即1。那么有效数字23位=10000000000000000000000

0.75的单精度浮点表示如下

IEEE浮点标准_第1张图片
image

我们也可以从上图计算出这个表示的浮点数是什么。

  • 符号位为0,那么是正数
  • 阶码是01111110=126,因为127其实是代表0,那么126就是代表-1(126-127=-1),也就是指数是-1。(记住阶码的作用是用来表示指数,通过阶码可以求得指数)
  • 有效数字是10000000000000000000000
  • 那么该浮点数就是
    1.(有效数字)*2指数=1.10000000000000000000000*2-1=0.110000000000000000000000(二进制)=0.75(10进制)

浮点数-4.75单精度示例

  • -4.75是负数,符号位为1
  • 4.75转为二进制=100.11,二进制科学计数法表示=1.0011*22,所以指数是2,因为阶码01111111=127表示0,所以2是用2+127=129来表示=10000001,阶码即是=10000001
  • 1.0011*22,所以有效数字是0011.

所以-4.75的浮点数表示是

IEEE浮点标准_第2张图片
-4.75的浮点数表示

可以通过C程序来测试一下:

#include 
#include

int main()
{
    float data;
    unsigned long buff;
    int i;
    char s[34];
    data=(float)0.75;
    memcpy(&buff,&data,4);
    //逐一提取出每一位
    for(int i=33; i>=0; i--)
    {
        if(i==1||i==10)
        {
            s[i]='-';
        }
        else
        {
            if(buff%2==1)
            {
                s[i]='1';
            }
            else
            {
                s[i]='0';
            }
            buff/=2;
        }
    }
    s[34]='\0';
    printf("%s\n",s);
}

0.75浮点数表示:


IEEE浮点标准_第3张图片
image

-4.75浮点数表示


IEEE浮点标准_第4张图片
image

你可能感兴趣的:(IEEE浮点标准)