浮点数的组成
-
浮点数的组成遵循 IEEE 754计数标准 可以用科学计数法表示
s 1. M ∗ 2 P s 1.M * 2^P s1.M∗2P -
s表示符号,M表示尾数,E表示阶码
S | P | M
- 其中,S为数的符号位,为0时表示正数,为1时表示负数;
- P为阶码,通常用移码表示;
- M为尾数,用原码表示。
-
在IEEE 754 标准中,约定小数点左边隐含有一位,通常这位数就是1。
3.89 用 浮点数表示
转 化 为 二 进 制 为 0.89 ≈ 1 / ( 1 < < 1 ) + 1 / ( 1 < < 2 ) + 1 / ( 1 < < 3 ) + 1 / ( 1 < < 7 ) + 1 / ( 1 < < 8 ) + 1 / ( 1 < < 9 ) + 1 / ( 1 < < 10 ) + 1 / ( 1 < < 12 ) + 1 / ( 1 < < 14 ) + 1 / ( 1 < < 15 ) + 1 / ( 1 < < 16 ) + 1 / ( 1 < < 21 ) + 1 / ( 1 < < 22 ) ( 3.89 ) 10 ≈ ( 11.1110001111010111000011 ) 2 浮 点 表 示 ( 一 般 对 指 数 部 分 + 127 , 便 于 浮 点 之 间 比 较 计 算 ) 0 10000000 11110001111010111000011 浮 点 十 六 进 制 表 示 0100 0000 0111 1000 1111 0101 1100 0011 0 x 4078 F 5 C 3 转化为二进制为\\ 0.89 \approx 1/(1<<1) +1/(1<<2) + 1/(1<<3) + \\ 1/(1<<7) + 1/(1<<8) + 1/(1<<9) + 1/(1<<10) +\\ 1/(1<<12) + 1/(1<<14) + 1/(1<<15) + 1/(1<<16) +\\ 1/(1<<21) + 1/(1<<22)\\ (3.89)_{10} \approx (11.1110 0011 1101 0111 0000 11)_{2}\\ 浮点表示(一般对指数部分+127,便于浮点之间比较计算)\\ 0\qquad 10000000\qquad 11110001111010111000011\\ 浮点十六进制表示\\ 0100\quad 0000\quad 0111\quad 1000\quad 1111\quad 0101\quad 1100\quad 0011\\ 0x4078F5C3 转化为二进制为0.89≈1/(1<<1)+1/(1<<2)+1/(1<<3)+1/(1<<7)+1/(1<<8)+1/(1<<9)+1/(1<<10)+1/(1<<12)+1/(1<<14)+1/(1<<15)+1/(1<<16)+1/(1<<21)+1/(1<<22)(3.89)10≈(11.1110001111010111000011)2浮点表示(一般对指数部分+127,便于浮点之间比较计算)01000000011110001111010111000011浮点十六进制表示010000000111100011110101110000110x4078F5C3
C语言验证代码
int main(int argc, char const *argv[])
{
float f = 3.89f;
printf("%#x\n",*(int *)&f);
return 0;
}
极值与Infinity值
-
浮点值的阶码 定义范围为 -126 ~ 127 ,故阶码的取值为 1~254
-
最大值
m a x v a l u e , 阶 码 为 127 , ( 127 + 127 = 254 ) ( 0 1111 1110 1111 1111 1111 1111 1111 111 ) 2 ( 0 X 7 F 7 F F F F F ) 16 max\ value,阶码为127,(127+127=254)\\ (0\quad1111\ 1110\quad 1111\ 1111\ 1111\ 1111\ 1111\ 111 \\)_{2}\\ (0X7F7F\ FFFF)_{16}\\ max value,阶码为127,(127+127=254)(01111 11101111 1111 1111 1111 1111 111)2(0X7F7F FFFF)16
- 最小正值
m i n p o s i t i v e v a l u e , 阶 码 为 − 126 , ( − 126 + 127 = 1 ) ( 0 0000 0001 0000 0000 0000 0000 0000 000 ) 2 ( 0 x 00800000 ) 16 min\ positive\ value ,阶码为-126,(-126+127=1)\\ (0\quad 0000\ 0001\quad 0000\ 0000\ 0000\ 0000\ 0000\ 000)_{2}\\ (0x00800000)_{16}\\ min positive value,阶码为−126,(−126+127=1)(00000 00010000 0000 0000 0000 0000 000)2(0x00800000)16
- 无限值
i n f i n i t y , 阶 码 为 128 , ( 128 + 127 = 255 ) ( 0 1111 1111 1111 1111 1111 1111 1111 111 ) 2 ( 0 X 7 F F F F F F F ) 16 infinity,阶码为128,(128+127=255)\\ (0\quad1111\ 1111\quad 1111\ 1111\ 1111\ 1111\ 1111\ 111 \\)_{2}\\ (0X7FFF\ FFFF)_{16}\\ infinity,阶码为128,(128+127=255)(01111 11111111 1111 1111 1111 1111 111)2(0X7FFF FFFF)16