对于浮点数的比较

这篇文章写得不错哦, http://www.cnblogs.com/catch/p/3604236.html


    (1)对于浮点型数据的正数部分,只要在精度范围内,都可以正确表示。

            float可以表示的数值位是23位,而int是32位,所以23位之内的int转换位float可以被精确表示。

           但是,23位以后的就极可能不能被精确表示了。

           例如,

                  显然,2^22转换位float可以被精确表示,

                  但是,2^24的int也可以被精确表示,虽然2^24超出了2^23 -1的flloat精度,但是float的指数部分可以表示2的倍数哦~


     (2)对于浮点数的小数部分,其实是一个A1 = 1,Q = 1/2的一个等比数列。求和可以得出1-(1/2)^n,其中n>1,所以对于float,n <= 23.和的极限是1。

               在浮点数的世界中,即使看似简单的0.1,表示起来叶很麻烦哦~都是用2^-1 + 2^ -2 + ...这样来累加无限逼近的哦~


       对于上面,可以看到,浮点数其实是不准确的,所以我们在使用浮点数的时候也要注意哦~

       还有对于浮点数的精度,其实是有效位的个数。因为浮点数的表示都是以统一的格式1.abcdef来表示的哦~不存在1001.0101这样的表示。

---------------------------------------------------------

还有,

    这里顺便谈下十进制与二进制的转换。

    记得,以前有个有趣的问题,就是N个苹果怎么划分成M份,才能无论顾客买多少个,都可以由M份拼凑出来。

     答案是,2^n( n >= 0 ),当然4进制,5进制之类的都可以哦~

     因为任何一个十进制整数都可以转换成一个二进制数。

 

     所以,对于一个数X(无论什么进制)只要X/2,表示X右移1位,如果余数是1,那么上一次的末尾肯定是1,否在是0。记录下余数,然后每次除2表示指数增加2倍哦~

     例如,

           17 = 16 + 1 = 1*2^4 + 0*2^3 + 0*2^1 + 1

           17/2 = 8 ...1             这里余下的1就是末尾那个1,可以知道二进制的末尾是1.

            8/2  = 4 ... 0            这里的0就是倒数第二个0

            4/2 = 2 ...0

            2/2 = 1                     这里小于2了,就没必要除了,最高位肯定是1。

            其实,类似1001每次往右移一位,即如果个位是1则除2肯定是1,否则为0.

         

      对于负数,也是类似,不过是由除以2变为了乘以2。

      1.001 这样就相当于左移,如果个位是0,则为0,个位是1则是1,然后注意计算指数就行了。

      例如,

          0.5125 X2

          1.025   个位 1      指数-1

          0.025   X 2            去掉个位的1.

           0.5     个位0         指数-2

           1.0      个位1       指数-3

           所以101* 2^-3 = 1.01 * 2^-1

         

         


    

     


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值