微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货 。7年资深后端研发,用简单的方式把技术讲清楚 。在上一篇文章中,我们主要介绍了在计算机中使用定点数表示数字的方式 。
简单回顾一下,简单来说,用定点数表示数字时,会约定小数点的位置固定不变,整数部分和小数部分分别转换为二进制,就是定点数的结果 。
但用定点数表示小数时,存在数值范围、精度范围有限的缺点,所以在计算机中,我们一般使用「浮点数」来表示小数 。
这篇文章,我们就来详细看一下浮点数到底是如何表示小数的,以及浮点数的的范围和精度有多大 。
什么是浮点数?首先,我们需要理解什么是浮点数?
之前我们学习了定点数,其中「定点」指的是约定小数点位置固定不变 。那浮点数的「浮点」就是指,其小数点的位置是可以是漂浮不定的 。
这怎么理解呢?
其实,浮点数是采用科学计数法的方式来表示的,例如十进制小数 8.345,用科学计数法表示,可以有多种方式:
8.345 = 8.345 * 10^08.345 = 83.45 * 10^-18.345 = 834.5 * 10^-2...
看到了吗?用这种科学计数法的方式表示小数时,小数点的位置就变得「漂浮不定」了,这就是相对于定点数,浮点数名字的由来 。
使用同样的规则,对于二进制数,我们也可以用科学计数法表示,也就是说把基数 10 换成 2 即可 。
浮点数如何表示数字?我们已经知道,浮点数是采用科学计数法来表示一个数字的,它的格式可以写成这样:
V = (-1)^S * M * R^E
其中各个变量的含义如下:
假设现在我们用 32 bit 表示一个浮点数,把以上变量按照一定规则,填充到这些 bit 上就可以了:
文章插图
假设我们定义如下规则来填充这些 bit:
- 整数部分:25(D) = 11001(B)
- 小数部分:0.125(D) = 0.001(B)
- 用二进制科学计数法表示:25.125(D) = 11001.001(B) = 1.1001001 * 2^4(B)
按照上面定义的规则,填充到 32 bit 上,就是这样:
文章插图
浮点数的结果就出来了,是不是很简单?
但这里有个问题,我们刚才定义的规则,符号位 S 占 1 bit,指数位 E 占 10 bit,尾数 M 占 21 bit,这个规则是我们拍脑袋随便定义出来的 。
如果你也想定一个新规则,例如符号位 S 占 1 bit,指数位 E 这次占 5 bit,尾数 M 占 25 bit,是否也可以?当然可以 。
按这个规则来,那浮点数表示出来就是这样:
文章插图
我们可以看到,指数和尾数分配的位数不同,会产生以下情况:
- 指数位越多,尾数位则越少,其表示的范围越大,但精度就会变差,反之,指数位越少,尾数位则越多,表示的范围越小,但精度就会变好
- 一个数字的浮点数格式,会因为定义的规则不同,得到的结果也不同,表示的范围和精度也有差异
这就会导致,一个程序在不同厂商下的计算机中做浮点数运算时,需要先转换成这个厂商规定的浮点数格式,才能再计算,这也必然加重了计算的成本 。
那怎么解决这个问题呢?业界迫切需要一个统一的浮点数标准 。
浮点数标准直到1985年,IEEE 组织推出了浮点数标准,就是我们经常听到的 IEEE754 浮点数标准,这个标准统一了浮点数的表示形式,并提供了 2 种浮点格式:
- 与财务会计有什么区别 会计和财务有什么区别?
- 07年属猪人的灾难年龄是几岁
- 谁说一千元买不到好手机 不到一千块钱的手机买什么好
- 公历农历的区别 公历是快的还是慢的
- 梦见棉花_周公解梦梦到棉花是什么意思_做梦梦见棉花好不好
- 梦见木莓_周公解梦梦到木莓是什么意思_做梦梦见木莓好不好
- 梦见蘑菇_周公解梦梦到蘑菇是什么意思_做梦梦见蘑菇好不好
- 梦见鳗鱼_周公解梦梦到鳗鱼是什么意思_做梦梦见鳗鱼好不好
- 梦见玫瑰花_周公解梦梦到玫瑰花是什么意思_做梦梦见玫瑰花好不好
- 梦见牡鹿_周公解梦梦到牡鹿是什么意思_做梦梦见牡鹿好不好