【问题标题】:Mid point in divide and conquer algorithm implementations [duplicate]分而治之算法实现的中点[重复]
【发布时间】:2016-11-17 02:12:45
【问题描述】:

我已经看到很多实现使用下面来找到两个索引的中点:

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

而不是

int mid = (lo + hi) / 2;

在数学上,我看不出有什么区别,但我从未见过有人使用下面的那个。两者在计算上有区别吗?

【问题讨论】:

  • 那你根本没见过多少。
  • 你可以试试 lo = 1, hi = 2147483647。
  • 还有这个oldie, but goodie
  • @cricket_007 太棒了!

标签: algorithm divide-and-conquer


【解决方案1】:

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

我们假设这个值为 100。

int lo = 60;
int hi = 80;

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

【讨论】:

  • "这将导致整数溢出错误" 整数溢出并不是真正的错误,是吗?这只是计算机处理需要太多位来表示的数字的错误情况的方式。
猜你喜欢
  • 2013-10-30
  • 2013-02-02
  • 1970-01-01
  • 2017-06-08
  • 2012-01-01
  • 1970-01-01
  • 2013-02-03
  • 1970-01-01
  • 2018-06-23
相关资源
最近更新 更多