gpt4 book ai didi

c++ - 实现数学公式时的溢出问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:57:28 24 4
gpt4 key购买 nike

听说计算平均值的时候,start+(end-start)/2和(start+end)/2不一样,因为后者会溢出。我不太明白为什么第二个会导致溢出而第一个不会。实现可以避免溢出的数学公式的通用规则是什么。

最佳答案

假设您使用的计算机的最大整数值为 10,并且您想要计算 5 和 7 的平均值。

第一种方法(begin + (end-begin)/2)给出

5 + (7-5)/2 == 5 + 2/2 == 6

第二种方法 (begin + end)/2 会产生溢出,因为中间值 12 超过了我们接受的最大值 10 并“包裹”到其他东西(如果您使用的是无符号数,通常回到零,但如果你的数字是有符号的,你可能会得到一个负数!)。

12/2 => overflow occurs => 2/2 == 1

当然,在真实的计算机中,整数会在 2^32(而不是 10)这样的大值时溢出,但原理是一样的。不幸的是,据我所知,没有消除溢出的“通用”方法,这在很大程度上取决于您使用的特定算法。然后,事情变得更加复杂。根据您在后台使用的数字类型,您可能会得到不同的行为,除了上溢和下溢之外,还有其他类型的数字错误需要担心。

关于c++ - 实现数学公式时的溢出问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10882368/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com