gpt4 book ai didi

c# - 将值舍入到最接近的 2 的幂

转载 作者:太空宇宙 更新时间:2023-11-03 18:05:36 29 4
gpt4 key购买 nike

我正在寻找 C# 中将值四舍五入为最接近的 2 的幂的最快方法。我发现如果使用像这样的按位运算符,最快的方法是将一个值四舍五入为 2 的下一个幂。

int ToNextNearest(int x)
{
if (x < 0) { return 0; }
--x;
x |= x >> 1;
x |= x >> 2;
x |= x >> 4;
x |= x >> 8;
x |= x >> 16;
return x + 1;
}

但这给出了下一个最近的而不是最近的,我只想得到最近的二的幂。这是一个简单的方法。

int ToNearest(int x)
{
Math.Pow(2, Math.Round(Math.Log(x) / Math.Log(2)));
}

但是有没有更好的优化版本来找到最接近的两个值的幂?

非常感谢。

最佳答案

当然,最好的方法是使用您的按位例程找到下一个 2 的幂,然后将该结果除以 2。这为您提供了之前的 2 次幂。然后一个简单的比较就会告诉你两者哪个更接近。

int ToNearest(int x)
{
int next = ToNextNearest(x);
int prev = next >> 1;
return next - x < x - prev ? next : prev;
}

未经测试的代码,但您明白了。

关于c# - 将值舍入到最接近的 2 的幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31997707/

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