Recentemente ho dovuto identificare se un numero è pari o dispari per un numero elevato di numeri interi. Ho pensato di un'idea di identificare un numero come pari o dispari da AND-ing contro 1 e confrontando il risultato di 1Identifica numeri dispari, pari - binario vs. mod
x & 1 == 1 // even or odd
Non ho mai visto questa implementazione nella pratica. Il modo più comune si vedono sempre è:
x % 2 == 0
ho deciso di fare un po 'di controllo delle prestazioni su entrambi i metodi e il metodo binario sembra leggermente più veloce sulla mia macchina.
int size = 60000000;
List<int> numberList = new List<int>();
Random rnd = new Random();
for (int index = 0; index < size; index++)
{
numberList.Add(rnd.Next(size));
}
DateTime start;
bool even;
// regular mod
start = DateTime.Now;
for (int index = 0; index < size; index++)
{
even = (numberList[index] % 2 == 0);
}
Console.WriteLine("Regualr mod : {0}", DateTime.Now.Subtract(start).Ticks);
// binary
start = DateTime.Now;
for (int index = 0; index < size; index++)
{
even = ((numberList[index] & 1) != 1);
}
Console.WriteLine("Binary operation: {0}", DateTime.Now.Subtract(start).Ticks);
Console.ReadKey();
Qualcuno ha visto il metodo binario implementato? Qualche inconveniente?
"Non ho mai visto questa implementazione nella pratica". Hai bisogno di leggere più codice. –
Non hai indicato i risultati, ma non è probabile che l'utilizzo di DateTime per tale misurazione sia sufficientemente accurato. – driis
È davvero strano che il binario stia funzionando meglio. Non sto discutendo i tuoi esperimenti, ma penserei che l'operazione ** MOD ** dovrebbe essere più veloce ... –