IEEE754浮点数标准

概述

IEEE754标准提供了两种规格的浮点格式:32位单精度格式和64位双精度格式。
IEEE754浮点数标准_第1张图片
符号位:1表示负数,0表示正数

尾数:用原码表示。规格化尾数的第一位总为1,因而缺省第一位的1,称该缺省位为隐藏位。IEEE754规定隐藏位1的位置在小数点之前。

阶码:用移码表示,偏置常数为 2 n − 1 − 1 2^{n-1}-1 2n11

前置知识

关于浮点数的“上溢”与“下溢”:
IEEE754浮点数标准_第2张图片

细节

IEEE754浮点数标准_第3张图片

全0阶码 + 全0尾数:+0、-0

全0阶码 + 非0尾数:非规格化数

非规格化数的隐藏位为0规定单精度和双精度浮点数的阶分别为:-126、-1022(不是-127、-1023!),故浮点数的值分别为: ( − 1 ) s × 0. f × 2 − 126 (-1)^s\times 0.f\times 2^{-126} (1)s×0.f×2126 ( − 1 ) s × 0. f × 2 − 1022 (-1)^s\times 0.f\times 2^{-1022} (1)s×0.f×21022

加入非规格化数后,IEEE754单精度浮点数的范围有如下变化:
IEEE754浮点数标准_第4张图片
图中将可表示数以 [ 2 n , 2 n + 1 ) [2^n,2^{n+1}) [2n,2n+1)的区间分组,同一组内的浮点数的阶均为 n n n。对于32位单精度规格化浮点数,尾数有23位,故每个区间内有 2 23 − 1 2^{23}-1 2231个数,相邻两数的间隔为 2 − 23 × 2 n 2^{-23}\times 2^n 223×2n。在图(a)中我们可以看出,在 0 0 0和最小规格化数 2 − 126 2^{-126} 2126之间有一个间隙。非规格化数就是在这个空隙中插入了 2 23 2^{23} 223个附加数,所有非规格化数的阶均为 − 126 -126 126,尾数部分的变化范围为 0.00 ⋯ 0 ∼ 0.11 ⋯ 1 0.00\cdots 0\sim 0.11\cdots 1 0.0000.111

全1阶码 + 全0尾数: + ∞ 、 − ∞ +\infty、-\infty +

无穷大既可以是操作数,也可以是运算的结果。

当无穷大作为操作数时,系统有如下两种处理方式:

  1. 产生不发信号的NaN: + ∞ + ( − ∞ ) +\infty+(-\infty) ++() + ∞ − ( + ∞ ) +\infty-(+\infty) +(+) ∞ / ∞ \infty/\infty /
  2. 产生明确结果: 5 + ( + ∞ ) = + ∞ 5+(+\infty)=+\infty 5+(+)=+ ( + ∞ ) + ( + ∞ ) = + ∞ (+\infty)+(+\infty)=+\infty (+)+(+)=+ 5 − ( + ∞ ) = − ∞ 5-(+\infty)=-\infty 5(+)= − ∞ − ( + ∞ ) = − ∞ -\infty-(+\infty)=-\infty (+)=等。

全1阶码 + 非0尾数:NaN

NaN(not a number)表示非数,分为发信号和不发信号两种。当尾数最高有效位为1时,表示不发信号的NaN;最高有效位为0时,表示发信号的NaN。
IEEE754浮点数标准_第5张图片

阶码非全0且非全1:规格化非0数

阶码范围为: 1 ∼ 254 1\sim254 1254(单精度)、 1 ∼ 2046 1\sim2046 12046(双精度),所以阶的范围是: − 126 ∼ 127 -126\sim127 126127(单精度)、 − 1022 ∼ 1023 -1022\sim1023 10221023(双精度)。
( − 1 ) s × 1. f × 2 e − 127 、 ( − 1 ) s × 1. f × 2 e − 2046 (-1)^s\times 1.f\times 2^{e-127}、(-1)^s\times 1.f\times 2^{e-2046} (1)s×1.f×2e127(1)s×1.f×2e2046

例题

题目1:将十进制数 − 0.75 -0.75 0.75用IEEA754的单精度浮点格式表示。

解:首先将 0.75 0.75 0.75用二进制表示,得到 ( 0.75 ) 10 = ( 0.11 ) 2 = ( 1.1 × 2 − 1 ) 2 (0.75)_{10}=(0.11)_2=(1.1\times 2^{-1})_2 (0.75)10=(0.11)2=(1.1×21)2。所以该数的阶码为 ( − 1 + 127 ) 10 = ( 126 ) 10 = ( 0111   1110 ) 2 (-1+127)_{10}=(126)_{10}=(0111\ 1110)_2 (1+127)10=(126)10=(0111 1110)2,所以 − 0 , 75 -0,75 0,75表示为单精度浮点格式为 101111110100 ⋯ 00 101111110100\cdots 00 10111111010000

你可能感兴趣的:(数据结构)