<分区>
在我在网上或书本上阅读的每一段代码中,如果有人想计算 s 和 e 之间的中点,他们会这样做:
int mid = s + ((e - s) / 2);
数学上这和
不是一回事int mid = (s + e) / 2;
那为什么经常用第一种方式写呢?我的猜测是防止整数溢出但不确定。
谢谢
<分区>
在我在网上或书本上阅读的每一段代码中,如果有人想计算 s 和 e 之间的中点,他们会这样做:
int mid = s + ((e - s) / 2);
数学上这和
不是一回事int mid = (s + e) / 2;
那为什么经常用第一种方式写呢?我的猜测是防止整数溢出但不确定。
谢谢
最佳答案
如果 e 接近整数的最大值,则 (s+e)/2
可以溢出,但 s+(e-s)/2
不能(假设s
是非负的)。
例如(MAX_INT-2 + MAX_INT)
== -4
,所以(MAX_INT-2 + MAX_INT)/2
== -2
关于algorithm - 为什么二进制搜索索引以这种方式计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38943175/