0
我见过许多实现使用下面找到中点两个指数:中间点而治之算法实现
int mid = lo + (hi - lo)/2;
代替
int mid = (lo + hi)/2;
在数学上,我看不出有什么差异,但是,我从来没有见过任何人使用下面的一个。这两种计算方法有什么不同?
我见过许多实现使用下面找到中点两个指数:中间点而治之算法实现
int mid = lo + (hi - lo)/2;
代替
int mid = (lo + hi)/2;
在数学上,我看不出有什么差异,但是,我从来没有见过任何人使用下面的一个。这两种计算方法有什么不同?
计算中存在32位带符号二进制整数的最大正值。
我们假设这个值是100
int lo = 60;
int hi = 80;
然后lo + hi = 60 + 80 = 140
>100
,这是危险这样做,因为它会导致一个integer overflow错误。
“它会导致整数溢出错误”整数溢出不是一个真正的错误,是吗?这只是计算机处理需要太多位来表示的数字的错误情况的方式。 – dorukayhan
然后,你根本没有看到太多。 –
你可以试试lo = 1,hi = 2147483647. –
而这[oldie,but goodie](https://research.googleblog.com/2006/06/extra-extra-read-all-about-it-nearly。 html) –