So überprüfen Sie, ob eine Zahl eine Leistung von 2 istC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 So überprüfen Sie, ob eine Zahl eine Leistung von 2 ist

Post by Anonymous »

Heute brauchte ich einen einfachen Algorithmus zur Überprüfung, ob eine Zahl eine Leistung von 2 ist. < /p>
Der Algorithmus muss sein: /> [*] Einfach
[*] Richtig für einen beliebigen Ulong Wert.

Ich habe mich ausgedacht das einfach Algorithmus: < /p>

Code: Select all

private bool IsPowerOfTwo(ulong number)
{
if (number == 0)
return false;

for (ulong power = 1; power > 0; power = power  number)
return false;
}
return false;
}
Aber dann dachte ich: Wie wäre es, wenn Protokoll 2 x genau eine runde Zahl ist? Als ich nach 2^63+1 checkte, gab Math.log () aufgrund der Rundung genau 63 zurück. Also habe ich überprüft, ob 2 zur Power 63 gleich der ursprünglichen Zahl ist und es ist, da die Berechnung in Double s und nicht in genauen Zahlen erfolgt.

Code: Select all

private bool IsPowerOfTwo_2(ulong number)
{
double log = Math.Log(number, 2);
double pow = Math.Pow(2, Math.Round(log));
return pow == number;
}
Dies gab true für den angegebenen falschen Wert zurück: 9223372036854775809 .
Gibt es einen besseren Algorithmus?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post