提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
IEEE二进制浮点数算术标准(IEEE 754)
简介
IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number),一些特殊数值((无穷(Inf)与非数值(NaN)),以及这些数值的“浮点数运算符”;它也指明了四种数值舍入规则和五种例外状况(包括例外发生的时机与处理方式)。
整体视图(小端)
sign:二进制浮点数是以符号数值表示法的格式存储——最高有效位被指定为符号位(sign bit);
exponent:“指数部分”,即次高有效的e个比特,存储指数部分;
fraction:最后剩下的f个低有效位的比特,存储“有效数”(significand)的小数部分(在非规约形式下整数部分默认为0,其他情况下一律默认为1)。
规则一:规约形式的浮点数
浮点数中指数部分的编码值在 0 < e x p o n e n t ≤ 2 e − 2 0<exponent≤2^{e}-2 0<exponent≤2e−2之间,且在科学表示法的表示方式下,分数 (fraction) 部分最高有效位(即整数字)是1
举例来说,双精度 (64-bit) 的规约形式浮点数在指数偏移值的值域为00000000001(11-bit) 到11111111110,在分数部分则是000…000到111…111(52-bit)
规则二:非规约形式的浮点数
如果浮点数的指数部分的编码值是0,分数部分非零,那么这个浮点数将被称为非规约形式的浮点数。(一般是某个数字相当接近零时才会使用非规约型式来表示)
IEEE 754标准规定:非规约形式的浮点数的指数偏移值比规约形式的浮点数的指数偏移值小1。
例如,最小的规约形式的单精度浮点数的指数部分编码值为1,指数的实际值为-126;而非规约的单精度浮点数的指数域编码值为0,对应的指数实际值也是-126而不是-127。实际上非规约形式的浮点数仍然是有效可以使用的,只是它们的绝对值已经小于所有的规约浮点数的绝对值;即所有的非规约浮点数比规约浮点数更接近0。规约浮点数的尾数大于等于1且小于2,而非规约浮点数的尾数小于1且大于0。
规则三:特殊值
- 如果指数是0并且尾数的小数部分是0,这个数±0(和符号位相关)
- 如果指数 = 2 e − 1 2^{{e}}-1 2e−1并且尾数的小数部分是0,这个数是±∞(同样和符号位相关)
- 如果指数 = 2 e − 1 2^{{e}}-1 2e−1并且尾数的小数部分非0,这个数表示为非数(NaN)。
只摘录了部分,后期有时间继续摘录。
参考文献:
https://zh.wikipedia.org/zh-cn/IEEE_754