IEEE754
IEEE 754 标准是IEEE浮点数算术标准(IEEE Standard for Floating-Point Arithmetic)的标准编号,等同于国际标准ISO/IEC/IEEE 60559。该标准由美国电气电子工程师学会(IEEE)计算机学会旗下的微处理器标准委员会(Microprocessor Standards Committee, MSC)发布。IEEE 754 标准规定了计算机程序设计环境中的二进制和十进制的浮点数自述的交换、算术格式以及方法。
IEEE 754规定了四种表示浮点数值的方式:单精确度(32位)、双精确度(64位)、延伸单精确度(43位以上,很少使用)与延伸双精确度(79位元以上,通常以80位元实做)。只有32位模式有强制要求,其他都是选择性的。大部分编程语言都有提供IEEE格式与算术,但有些将其列为非必要的。例如,IEEE 754问世之前就有的C语言。IEEE754标准包括IEEE算术,但不算作强制要求(C语言的float通常是指IEEE单精确度,而double是指双精确度)。
浮点数的机器表示
表现形式
- 符号位
- 阶码
- 尾数
符号位,即用来表示浮点数正负的标识。阶码即为指数。尾数数据科学记数法的前缀表示。并且标准规定基数E为2,具体表现形式如下图:
符号位 | 阶码 | 尾数 |
---|---|---|
单精度和双精度的754标准布局
float和double的内存布局如下,
类型 | 存储位数 | 偏移值 | ||||
---|---|---|---|---|---|---|
数符 | 阶码 | 尾数 | 总位数 | 十六进制 | 十进制 | |
短实数(Single,Float) | 1 | 8 | 23 | 32 | 0X7FH | +127 |
长实数(Double) | 1 | 11 | 52 | 64 | 0x3FFH | +1023 |
- float
以float为例,float的内存布局为:数符1位,阶码8位,尾数23位。可以知道,float指数的取值范围为:-127~+128,即:
float的取值范围为:[-2^128~2^128],转化为科学记数法为:-3.40E+38 ~ +3.40E+38 - double 同float的计算方法。
浮点数有效位数
float:尾数的位数为23,则尾数所能表示的最大值为2^23,即8388608,也就是说float的精度最大为7位数。
double:尾数的位数为52,而2^52=4503599627370496,一共16位,即:精度最大为16位。