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     }
  • 相关阅读:
    day12-html(css)
    day-12- 前端 html
    python-day11 pymysql
    day11-mysql 练习题
    python-day11 Mysql 数据类操作
    python-day11 Mysql 数据类型
    python-day11-MYSQL 数据库及数据表
    最简单的checkbox, radio跟文字在一行
    前端压缩
    table td 设置宽高无效的问题
  • 原文地址:https://www.cnblogs.com/zsh-blogs/p/10386961.html
Copyright © 2011-2022 走看看