当前位置: 首页 > news >正文

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     }

 

转载于:https://www.cnblogs.com/zsh-blogs/p/10386961.html

相关文章:

  • 01炼数成金TensorFlow基本概念
  • Spark调度模块
  • 封装dialog弹窗
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • CentOS6 Shell脚本/bin/bash^M: bad interpreter错误解决方法
  • 搭建gitbook 和 访问权限认证
  • 测试开发系类之接口自动化测试
  • Chrome 控制台报错Unchecked runtime.lastError: The message port closed before a response was received...
  • 读vue源码看前端百态2--打包工具
  • NoSQL是什么?
  • [ES-5.6.12] x-pack ssl
  • 20190220w
  • 怎么将电脑中的声音录制成WAV格式
  • 你的微博也被盗赞?试试HSTS强制HTTPS加密
  • Linux或UNIX系统配置检查
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • bearychat的java client
  • js中的正则表达式入门
  • linux安装openssl、swoole等扩展的具体步骤
  • overflow: hidden IE7无效
  • Python连接Oracle
  • React+TypeScript入门
  • SpringBoot 实战 (三) | 配置文件详解
  • Vue实战(四)登录/注册页的实现
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 对象引论
  • 分布式事物理论与实践
  • 浮现式设计
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 你真的知道 == 和 equals 的区别吗?
  • 前端面试之闭包
  • 算法-插入排序
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • $ git push -u origin master 推送到远程库出错
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (编译到47%失败)to be deleted
  • (第27天)Oracle 数据泵转换分区表
  • (二)springcloud实战之config配置中心
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (力扣)1314.矩阵区域和
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (四)模仿学习-完成后台管理页面查询
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)IOS中获取各种文件的目录路径的方法