二进制搜索中mid =(beg + end)/ 2和mid = beg +(end-beg)/ 2之间有什么区别?

Peg*_*sus 10 c++ algorithm integer-overflow binary-search

这是一个来自C++引言第五版问题3.26的问题,我不知道它们之间的区别?可能是第二个可以避免溢出.

Mik*_*our 15

可能是第二个可以避免溢出.

究竟.无法保证beg+end可以表示; 但在第二种情况下,中间值以及预期结果不大于end,因此不存在溢出的危险.

第二种形式也可用于仿射类型,如指针和其他随机访问迭代器,可以减去它们以给出距离,但不能相加.