【发布时间】:2016-08-14 14:25:27
【问题描述】:
在我在网上或书上阅读的每一段代码中,如果有人想计算 s 和 e 之间的中点,他们会这样做:
int mid = s + ((e - s) / 2);
这在数学上和
不一样int mid = (s + e) / 2;
那么为什么它经常以第一种方式编写呢?我的猜测是防止整数溢出但不确定。
谢谢
【问题讨论】:
-
你得到了正确的答案。事实上,有些代码确实使用了
(s+e)/2,但是是的,它会导致整数溢出的问题。 -
由于整数除法的不同,它们并不相同。
-
@EdHeal 问题只是溢出。只要
s和e为正数,除法中的舍入结果相同。 -
@EdHeal:你能指定一些产生不同结果的数字(不会导致溢出)吗?
标签: algorithm binary mean binary-search