Potenzberechnung

Hallo in die Runde,
ich stehe gerade etwas auf dem Schlauch und wei nicht mal, wonach ich genau suchen muss.

Ich habe eine Zahl (z. B. 28)
Jetzt mchte ich als Ergebnis die nchsthhere Zweierpotenz (?) bekommen. In diesem Fall also 5 (2^5=32).
Wie berechne ich das?

Gru, Stefan Mettenbrink.

Geh doch einfach nacheinander durch die Bits der Prüfzahl, vom höchst- zum niedrigstwertigsten. Beim ersten gesetzten Bit gehst du eins zurück und hast die Potenz, zu der du die 2 nehmen musst.

Hallo,
erstelle eine Methode mit dem Namen “log2” wie folgt:

Public Function log2(theNumber as Double) as Double dim n as Double n = (log(theNumber)/log(2)) Return n End Function

Um die nchste 2er Potenz zu erhalten, rufst du einfach diese Methode wie folgt auf:

NaechsteZweierPotenz = 2^(Ceil(log2(HierDeineZahlEintragen)))

Wenn du fr “HierDeineZahlEintragen” die Zahl 28 eintrgst, dann bekommst du 32 als “NaechsteZweierPotenz” raus.

dim x as integer dim s as string x = 28 //convert x to binary string. Turn all 1 into zero. set the next significant bit s = "&b1" + replaceall(bin(x),"1","0") msgbox format(val(s),"0")

Danke!

Gleich das anschlieende Problem.

Ich habe das in ein TextChangeEvent gepackt:

dim n,theNumber as UInt64 theNumber = val(me.text) n = (log(theNumber)/log(2)) Label1.text="< 2^"+str(n)+" (="+str(2^n)+")"

Fr die Zahl 6161458183802978301 erhalte ich:
< 2^62 ( = 4.611686e+18)

Ich htte hier die Zahl gern ganz ausgeschrieben (ohne e). Wie bekomme ich das hin?

Hallo,
Xojo bietet dazu die „Format“-Methode an (siehe Sprachreferenz).
Anstatt [quote]str(2^n)[/quote] versuche es mal z.B. mit [quote]Format(2^n, “#”)[/quote]

Ah, OK.
Das sieht gut aus. Danke.