C#公式确定索引
Posted
技术标签:
【中文标题】C#公式确定索引【英文标题】:C# formula to determine index 【发布时间】:2013-11-07 13:24:30 【问题描述】:我的程序中有数学问题。我认为问题很简单,但我不确定要使用哪些术语,因此我自己的搜索没有返回任何有用的信息。
我在一个方法中收到一些值,我唯一知道的(就逻辑而言)是数字是可以复制的。
换句话说,我可以收到的数字是可以预测的,并且会是以下之一
1
2
4
16
256
65536
etc
我需要知道它们出现在哪个索引处。换句话说,1
总是在索引0
,2
在索引1
,4
在索引3
,16
在索引4
等处。
我知道我可以写一个大的 switch 语句,但我希望公式会更整洁。你知道是否存在或任何线索作为我正在使用的数学论坛的名称。
【问题讨论】:
numbers will be something which can be duplicated
这些看起来更像是 2 的幂。
@tnw,这表明我的数学有多糟糕!至少我可以开始查找了,谢谢
除1外,每个数都是前一个平方
它看起来像几何级数
和c#有什么关系?
【参考方案1】:
您列出的数字是 2 的幂。将数字提高到幂的反函数是对数,所以这就是您用来从(在这里使用您的术语)数字倒退到索引的方法。
var num = 256;
var ind = Math.Log(num, 2);
以上,ind
是 num 的 base-2 对数。此代码适用于任何基础;只需将该基础替换为2
。如果您只打算使用 2 的幂,那么您可以使用基于输入的按位表示更快的特殊情况解决方案;见What's the quickest way to compute log2 of an integer in C#?
【讨论】:
我实际上在计算器上查看了日志,因为我猜到了一些类似的东西,但我永远不会解决这个问题。再次乔恩,谢谢你。 在这种情况下,“4”将不适合索引[3]
:)【参考方案2】:
试试
Math.Log(num, base)
base
是 2
MSDN:http://msdn.microsoft.com/en-us/library/hd50b6h5.aspx
对数将从您的数字返回到您的底数。 但如果你的数字真的是 2 的幂, 否则你必须准确地了解你拥有什么,你需要什么 看起来 numbers 被 2 供电两次,所以试试这个:
private static int getIndexOfSeries(UInt64 aNum)
if (aNum == 1)
return 0;
else if (aNum == 2)
return 1;
else
int lNum = (int)Math.Log(aNum, 2);
return 1+(int)Math.Log(lNum, 2);
UInt64[] Arr = new UInt64[] 1, 2, 4, 16, 256, 65536, 4294967296
的结果是:
Num[0] = 1
Num[1] = 2
Num[2] = 4
Num[3] = 16
Num[4] = 256
Num[5] = 65536
Num[6] = 4294967296 //65536*65536
在哪里[i]
- 索引
【讨论】:
【参考方案3】:你应该计算以 2 为底的对数
【讨论】:
【参考方案4】:提示:对于结果:
0 2
1 4
2 16
3 256
4 65536
5 4294967296
etc.
公式是,给定整数 x:
Math.Pow(2, Math.Pow(2, x));
那是
2 to the power (2 to the power (x) )
一旦知道公式,就可以解出 x (因为你已经得到了答案,所以我不会讲)。
【讨论】:
以上是关于C#公式确定索引的主要内容,如果未能解决你的问题,请参考以下文章