gpt4 book ai didi

c# - 计算整数十进制长度的最快方法? (。网)

转载 作者:可可西里 更新时间:2023-11-01 03:10:22 29 4
gpt4 key购买 nike

我有一些代码可以对 64 位整数进行大量比较,但是它必须考虑数字的长度,就好像它被格式化为字符串一样。我无法更改调用代码,只能更改函数。

最简单的方法(除了 .ToString().Length 之外)是:

(int)Math.Truncate(Math.Log10(x)) + 1;

然而,这表现相当糟糕。由于我的应用程序只发送正值,并且长度在 2 和 9 之间相当均匀地分布(有些偏向 9),我预先计算了这些值并有 if 语句:

static int getLen(long x) {
if (x < 1000000) {
if (x < 100) return 2;
if (x < 1000) return 3;
if (x < 10000) return 4;
if (x < 100000) return 5;
return 6;
} else {
if (x < 10000000) return 7;
if (x < 100000000) return 8;
if (x < 1000000000) return 9;
return (int)Math.Truncate(Math.Log10(x)) + 1; // Very uncommon
}
}

这样可以用 4 次比较的平均值来计算长度。

那么,我可以使用任何其他技巧来使此功能更快吗?

编辑:这将作为 32 位代码 (Silverlight) 运行。

更新:

我采纳了 Norman 的建议并稍微更改了 ifs 以导致平均只有 3 次比较。根据 Sean 的评论,我删除了 Math.Truncate。总之,这使事情增加了大约 10%。谢谢!

最佳答案

两个建议:

  1. 先介绍常见案例。
  2. 进行二分搜索以在最坏情况下尽量减少比较次数。您可以使用恰好 3 次比较在 8 个备选方案中做出决定。

除非分布非常偏斜,否则这种组合可能不会给你带来太多好处。

关于c# - 计算整数十进制长度的最快方法? (。网),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/679602/

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