我已经看到很多实现使用下面的方法找到两个索引的中点:
int mid = lo + (hi - lo) / 2;
而不是
int mid = (lo + hi) / 2;
在数学上,我看到没有区别但是,我从未见过有人使用下面的那个。两者之间是否存在计算差异?
答案 0 :(得分:1)
计算中存在32位带符号二进制整数的最大正值。
我们假设此值为100。
int lo = 60;
int hi = 80;
然后lo + hi = 60 + 80 = 140
> 100
,这样做很危险,因为它会导致integer overflow错误。