algorithm - 为什么二进制搜索索引以这种方式计算?

标签 algorithm binary mean binary-search

<分区>

在我在网上或书本上阅读的每一段代码中,如果有人想计算 s 和 e 之间的中点,他们会这样做:

int mid = s + ((e - s) / 2);

数学上这和

不是一回事
int mid = (s + e) / 2;

那为什么经常用第一种方式写呢?我的猜测是防止整数溢出但不确定。

谢谢

最佳答案

如果 e 接近整数的最大值,则 (s+e)/2 可以溢出,但 s+(e-s)/2 不能(假设s 是非负的)。

例如(MAX_INT-2 + MAX_INT) == -4,所以(MAX_INT-2 + MAX_INT)/2 == -2

关于algorithm - 为什么二进制搜索索引以这种方式计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38943175/

相关文章:

ruby-on-rails - 生成独特的,难以猜测的 “coupon”代码

python - 带权有向图中总权值最小

oracle - 在 PL/SQL 中将二进制转换为 varchar

java - 如何使用 java 或 scala 处理大文件的最后一 block

algorithm - 非困惑定理的证明

function - 将 haskell 函数转换为使用字节字符串

python - Python中数值的陷阱, "How deep?"

python - 计算其中包含 np.nan 的 pandas 数据框值的平均值的最佳方法是什么?

r - 在 ggplot2 中创建分组条形图,显示平均值(我不想手动输入)

node.js - 如何在openshift中设置上传文件夹?