gpt4 book ai didi

c++ - 如何以 100,000 为增量高效地找到最接近两个整数均值的最大整数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:35:02 26 4
gpt4 key购买 nike

假设我得到整数 xy (满足 x <= y0 的个位数,因此它们可以被 2 整除)。然后我知道他们的平均值 avg = ((x+y) / 2)也是一个整数。我想找到这个中点四舍五入到 100 的分辨率.换句话说,如果我的两个输入是 75200 和 75300,那么平均值是 75250 并四舍五入到最接近的 100。 (但不超过或等于更大的数字)强制答案为 75200。

如何在不首先将所有内容除以 100 并使用以下浮点运算的情况下实现此逻辑:

x + std::floor((y - x) * .5 * 100 + .5)*0.01

换句话说,我如何在没有浮点值的情况下执行上述操作,但在 100 的分辨率下获得相同的行为?而不是 0.01

最佳答案

计算你能做的平均值

avg = (x + y) / 2

(顺便说一句,整数加法和除以 2 是非常便宜的操作,即使在小型微 Controller 上也是如此。)

要将其舍入到最接近的 100 的倍数(对应于您的浮点示例),您可以这样做

result = ((avg + 50) / 100) * 100

作为整数除法向下舍入到最接近的整数。通过将 50 更改为 0,您始终可以向下舍入,而将其更改为 99 则始终向上舍入。

编辑:请注意,这种舍入方法不适用于负数。由于整数除法向零舍入,在这种情况下,您需要减去 50,减去 99 以始终向下舍入并减去 0 以总是四舍五入。

关于c++ - 如何以 100,000 为增量高效地找到最接近两个整数均值的最大整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14407419/

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