2016-11-17 65 views
0

我见过许多实现使用下面找到中点两个指数:中间点而治之算法实现

int mid = lo + (hi - lo)/2; 

代替

int mid = (lo + hi)/2; 

在数学上,我看不出有什么差异,但是,我从来没有见过任何人使用下面的一个。这两种计算方法有什么不同?

+0

然后,你根本没有看到太多。 –

+0

你可以试试lo = 1,hi = 2147483647. –

+1

而这[oldie,but goodie](https://research.googleblog.com/2006/06/extra-extra-read-all-about-it-nearly。 html) –

回答

1

计算中存在32位带符号二进制整数的最大正值。

我们假设这个值是100

int lo = 60; 
int hi = 80; 

然后lo + hi = 60 + 80 = 140>100,这是危险这样做,因为它会导致一个integer overflow错误。

+0

“它会导致整数溢出错误”整数溢出不是一个真正的错误,是吗?这只是计算机处理需要太多位来表示的数字的错误情况的方式。 – dorukayhan