分而治之算法实现的中点
Mid point in divide and conquer algorithm implementations
我见过许多使用下面的实现来找到两个索引的中点:
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错误
我见过许多使用下面的实现来找到两个索引的中点:
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错误