c++ 浮点数表示

1.为何称为浮点数

对于一个浮点数来说,其通常可以科学计数法来表示,而对于一个浮点数来说,由于次方可变,故小数点可以左右移动。

eg:-36.5 ,及可以表示为:-3.65\times 10^{},也可以表示为-0.365\times 10^{2},故称为浮点数。

 

2.十进制浮点数以及规范化

       在十进制数中,,如 -36.5,可以表示为 -0.365\times 10^{2}

       其中  -  表示符号, 指数2 表示阶或阶码,0.365是小数部分,小数部分称为尾数,从左边非零数到右边数字非零数字所包含的最长数列称为有效值,此处为365。

      为了统一规范,十进制浮点数规范化要求,写成小数点前不含有效数字,小数点后一位为非零数,如上例所示。

3.十进制浮点数和二进制的转换

     在计算机内部,浮点数是以二进制的方式保存。对于十进制浮点数转换成二进制,我们知道,整数部分利用除2取余法,小数部分利用乘2取整法。

4.二进制浮点数以及规范化

       二进制中的阶等概念同十进制一样,但是在规范化上并不相同。

       首先,我们要知道,在计算机内部,浮点数是以国际标准IEEE754形式表示的。即,分三部分,第一部分占一位,表示正负,第二部分,占8位或者11位表示阶数,第三部分为尾数。

 

                                                  上图所示,分别为32为浮点数(float)和64位浮点数(double)格式

二进制浮点数规范化要求:进制浮点数整数部分要求为1,eg:0.8125 =0.1101  =1.101\times 2^{-1},也就是将1左移了一位。

如果按照十进制的规范化,要求小数点后为非0,那么在任意一个二进制浮点数中,只能是1,而1会称为尾数的第一个数字,尾数就会被占据一位,失去宝贵的一位精度,因此为提高精度,故将1左移一位,这样,23位尾数,后面就会补上一位,也就是24位精度。

5.二进制浮点数的阶码以及机内表示

       标准32位浮点数的阶码范围为-126---127,因为c++中,-127和-128分别表示阶码为-126的非规格化数和NaN(非法操作的数)。所谓非规格化数,也就是按照十进制规格来表示的,整数部分不为1,1在尾数的首位,包含在尾数中。

        浮点数在计算机内表示为,

        eg:35.6 = 10011.1001 = 1.00011 100110011001100110 \times 2^{5} 

那么它在计算机内部表示为什么呢?  根据规格,符号位为正,故为0, 阶数为5(单精度精度浮点数,对规格化和非规格化的阶数,均加127,做偏移操作,而在取出浮点数时,再减去127),故5+127 ,表示为10000100,最后尾数部分,取23位尾数即可,00011 100110011001100110 (最后一位要取四舍五入,别忘了进位,比如此处最后一位为0,其后为0,四舍五入,最后任然为0,若最后位0,其后为1,舍去要进1).

6.浮点型表示范围(有效位数)

以上绝大部分源于钱能c++程序设计,为读后总结

 

 

 

 

 

 

 

 

 

 

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值