IEnumerable
प्रदर्शन करने वाला नहीं है।
static uint[] MulDeBruijnBitPos = new uint[32]
{
0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8,
31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9
};
static uint[] GetExponents(uint value)
{
uint[] data = new uint[32];
int enabledBitCounter = 0;
while (value != 0)
{
uint m = (value & (0 - value));
value ^= m;
data[enabledBitCounter++] = MulDeBruijnBitPos[(m * (uint)0x077CB531U) >> 27];
}
Array.Resize<uint>(ref data, enabledBitCounter);
return data;
}
एक और संस्करण (दूसरा सबसे तेज - 10M रन देकर 3 सेकंड, रेंज: -
पहले एक (10M रन रेंज 1..10M के लिए 2.35 सेकंड सबसे तेजी से): इस विषय में कुछ उदाहरण के अनुकूलन 1..10M):
static uint[] GetExponents(uint value)
{
uint[] data = new uint[32];
int enabledBitCounter = 0;
for (uint i = 0; value > 0; ++i)
{
if ((value & 1) == 1)
data[enabledBitCounter++] = i;
value >>= 1;
}
Array.Resize<uint>(ref data, enabledBitCounter);
return data;
}
मेरे अपने अनुभव Math.Pow में बहुत बहुत धीमी है। यहां तक कि धीमे, बहुत से धीमे, कहते हैं, Math.Cos या Math.Sqrt। इसमें कभी भी पूर्णांक बदलावों का प्रदर्शन करने का कोई मौका नहीं है। –