浮点数计算

浮点数

单精度浮点数共 32 位 = 1符号位[31] + 8指数位[23-30] + 23有效数字位[0-22]

双精度浮点数共 64 位 = 1符号位[63] + 11指数位[52-62] + 52有效数字位[0-51]

指数偏移量(exponent bias),因为浮点数的指数是无符号数,而且指数有正有负,为了使指数能表示正数和负数设置了指数偏移量,小于指数偏移量的为负,反之为正。

指数偏移量 = 2^(指数位-1)-1。

单精度浮点数的指数偏移量为127(0111 1111)

双精度浮点数的指数偏移量为1023(011 1111 1111)

将十进制小数转换成浮点数

  1. 将十进制小数转换成二进制

1.1 转换整数部分(除2)
整数部分除2保留余数,结果继续除2直到结果为0,将所得的余数从后往前依次拼接起来就是二进制数。
6 / 2 = 3 余 0
3 / 2 = 1 余 1
1 / 2 = 0 余 1
∴ 6 => 110
1.2 转换小数部分(乘2)
小数部分乘2保留结果的整数部分,结果的小数部分继续乘2直到结果的小数部分为0,将所得的整数部分从前往后依次拼接。
0.8125 * 2 = 1.625 整数 1 小数 0.625
0.625 * 2 = 1.25 整数 1 小数 0.25
0.25 * 2 = 0.5 整数 0 小数 0.5
0.5 * 2 = 1.0 整数 1 小数 0
∴ 0.8125 => 0.1101

  1. 确定符号位、指数位和有效数字位

2.1 符号位 1 表示负数,0 表示正数
2.2 将二进制小数保留一位整数,小数点左移n位,指数为+n,小数点右移n位,指数为-n,指数位为偏移量+指数
2.3 保留一位整数之后的小数部分就是尾数(二进制数因为保留一位整数之后,整数部分始终为1)。有效数字位为尾数后面补零

  1. 得出结果

将符号位、指数位(偏移量+指数)、有效数字位依次拼接起来就是

例如:-12.75 转换成单精度浮点数

  1. 将十进制小数转换成二进制:-1100.11

1.1 转换整数部分(除2):-1100
1.2 转换小数部分(乘2):0.11

  1. 确定符号位、指数位和有效数字位:-1.10011

2.1 符号位:1
2.2 指数位:127 + 3 = 128 + 2 = 1000 0000 + 10 = 1000 0010
2.3 有效数字位:100 1100 0000 0000 0000 0000

  1. 得出结果:1 1000 0010 100 1100 0000 0000 0000 0000

将浮点数转换成十进制小数

  1. 先确定符号位、指数位、有效数字位

先根据浮点数位数 确定是单精度还是双精度,然后确定符号位、指数位、有效数字位

  1. 确定符号、指数和小数

符号位为1则为负数,反之为正数
指数 = 指数位 - 偏移量
小数 = 有效数字位去掉右端的0

  1. 得出结果

小数部分 + 1得到尾数
指数为+n则小数点右移n位反之左移n位得到二进制小数。
将二进制小数转换成十进制小数

posted @ 2021-06-10 11:38  嘘,别吵  阅读(1410)  评论(0编辑  收藏  举报