首页 行业资讯 宠物日常 宠物养护 宠物健康 宠物故事

c++二分法迭代中为什么min=(end-beg)/2不行?而要用min=beg+(end-beg)/2 ?

发布网友 发布时间:2022-04-23 13:52

我来回答

3个回答

热心网友 时间:2023-10-16 17:20

题主你应该写错了,不是(end - beg)/2,应该是:
beg+(end-beg)/2 = (beg + end)/2
而且(end-beg)/2只是区间长度的一半,而(beg + end)/2才是beg和end的中间位置。
至于为什么要用beg+(end-beg)/2而不是 (beg + end)/2。
因为假设beg和end都很大,超过了int的一半,那么beg + end可能会溢出,这时候再除2也无济于事。而如果用beg+(end-beg)/2就不会溢出,因为(end-beg)不会溢出,除2更不会溢出,至于beg+(end-beg)/2,这个加法肯定不会超过end,所以也就不会溢出啦!

热心网友 时间:2023-10-16 17:20

二分法 是每次向两个点中间收缩的
比如 上一次是100到1000,那么下一次的点 就要在这个中间。 比如n,需要满足
100<n<1000
如果用min=(end-begin)/2
举个例子
end=100
begin=90
那么min=5
明显不对 需要的是95啊

热心网友 时间:2023-10-16 17:20

道理是算法不正确 ~~~~~

热心网友 时间:2023-10-16 17:20

题主你应该写错了,不是(end - beg)/2,应该是:
beg+(end-beg)/2 = (beg + end)/2
而且(end-beg)/2只是区间长度的一半,而(beg + end)/2才是beg和end的中间位置。
至于为什么要用beg+(end-beg)/2而不是 (beg + end)/2。
因为假设beg和end都很大,超过了int的一半,那么beg + end可能会溢出,这时候再除2也无济于事。而如果用beg+(end-beg)/2就不会溢出,因为(end-beg)不会溢出,除2更不会溢出,至于beg+(end-beg)/2,这个加法肯定不会超过end,所以也就不会溢出啦!

热心网友 时间:2023-10-16 17:20

二分法 是每次向两个点中间收缩的
比如 上一次是100到1000,那么下一次的点 就要在这个中间。 比如n,需要满足
100<n<1000
如果用min=(end-begin)/2
举个例子
end=100
begin=90
那么min=5
明显不对 需要的是95啊

热心网友 时间:2023-10-16 17:20

道理是算法不正确 ~~~~~

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com