0%

计算机中的浮点数

计算机中的浮点数

二进制表示小数

说到浮点数,就要先说一下小数,计算机都是使用二进制来进行表示的,所以十进制中的小数部分就是2进制中的负指数次幂

如二进制中1.011就表示为十进制的1*$2^0$+0*$2^{-1}$+1*$2^{-2}$+1*$2^{-3}$,也就是1.375,其实这也是为什么在进行小数部分计算时不准确的原因

浮点数

很多编程语言中都提供了两种表示小数的数据类型,分别是双精度浮点数和单精度浮点数,双精度浮点数类型用64位,单精度浮点数类型用32位来表示

如何表示

浮点数是指符号、尾数、基数和指数这四部分来进行表示,计算机使用的是二进制,所以基数是2,不需要考虑基数,只需要用符号、尾数、指数三部分就可以表示浮点数

1
2
3
4
5
// 指数也叫做阶码,阶码一般是用移码表示,尾数一般是补码表示(IEEE754标准中尾数也可以用原码表示),阶码的正负叫阶符,尾数的符号位叫数符
// 阶码决定数的表示范围
// 尾数决定数的有效精度
// 对阶时,小数向大数看齐,通过较小的尾数右移实现的
符号 尾数 * 基数 ^ (指数)

如果浮点数的阶码(包括一位阶符)用R位的移码表示,尾数(包括一位数符)用M位的补码表示,则浮点数表示的数值范围时

最大正数为 $+(1-2^{-M+1})*2^{2^{R-1}-1}$

最小负数为$-1*2^{(2^{R-1}-1)}$

双精度

1
<-- 符号部分1位 --> <-- 指数部分11位 --> <-- 尾数部分52位 -->

单精度

1
<-- 符号部分1位 --> <-- 指数部分8位 --> <-- 尾数部分23位 -->

欢迎关注我的其它发布渠道