zoukankan      html  css  js  c++  java
  • Java求两个数平均值

      如何正确的求2个数的平均值。在练习算法二分查找的时候发现的,以前没有注意到的bug

      备注:数据以int类型为例

    一、以前的通用写法

    1 /**
    2      * 求a+b平均值
    3      * @param a
    4      * @param b
    5      * @return a+b的平均值
    6      */
    7     static int avg(int a ,int b){
    8         return (a+b)/2;
    9     }

      请记住:这是一个有bug的写法,因为两个数相加有可能超过了int的范围,但是他们的平均值肯定不会超过范围。以前没有注意到这个问题,知道深入了解了位运算。

    二、正确写法

     1 /**
     2      * 求a+b平均值
     3      * @param a
     4      * @param b
     5      * @return a+b的平均值
     6      */
     7     static int avg(int a ,int b){
     8         double random = Math.random();
     9         if (random >= 0 && random <= 0.25){
    10             //正确写法1
    11             return ((a&b) + ((a^b) >> 1));
    12         }else if (random > 0.25 && random <= 0.5){
    13             //正确写法2
    14             return b+(a-b)/2;
    15         }else if (random > 0.5 && random <= 0.75){
    16             //正确写法3
    17             return b+((a-b)>>1);
    18         }else if (random > 0.75 && random <= 1.0){
    19             //正确写法4
    20             return (a+b)>>>1;
    21         }else {
    22             return -1;
    23         }
    24     }
  • 相关阅读:
    Less资源汇总
    Less函数说明
    Less使用说明
    Less 简介
    tomcat-users.xml 配置
    java project打包生成jar包(通用)
    5分钟理解String的'+'的性能及原理
    字符串"+"操作的原理
    Shell脚本实现对文件编辑
    mysql关于聚集索引、非聚集索引的总结
  • 原文地址:https://www.cnblogs.com/zsh-blogs/p/10386961.html
Copyright © 2011-2022 走看看