Potenzberechnung

  1. 6 months ago

    Stefan M

    Oct 6 Germany, NRW, Kirchlengern (Kr...

    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 möchte ich als Ergebnis die nächsthöhere Zweierpotenz (?) bekommen. In diesem Fall also 5 (2^5=32).
    Wie berechne ich das?

    Gruß, Stefan Mettenbrink.

  2. Ulrich B

    Oct 6 Pre-Release Testers, Xojo Pro Europe (Germany, Berlin) · xo...

    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.

  3. Christian M

    Oct 6 Pre-Release Testers, Xojo Pro Germany
    Edited 6 months ago

    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 nächste 2er Potenz zu erhalten, rufst du einfach diese Methode wie folgt auf:

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

    Wenn du für "HierDeineZahlEintragen" die Zahl 28 einträgst, dann bekommst du 32 als "NaechsteZweierPotenz" raus.

  4. Jeff T

    Oct 6 Midlands of England, Europe
    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")
  5. Stefan M

    Oct 6 Germany, NRW, Kirchlengern (Kr...

    Danke!
    ...
    Gleich das anschließende 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)+")"

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

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

  6. Christian M

    Oct 7 Pre-Release Testers, Xojo Pro Germany

    Hallo,
    Xojo bietet dazu die „Format“-Methode an (siehe Sprachreferenz).
    Anstatt

    str(2^n)

    versuche es mal z.B. mit

    Format(2^n, "#")

  7. Stefan M

    Oct 7 Germany, NRW, Kirchlengern (Kr...

    Ah, OK.
    Das sieht gut aus. Danke.

or Sign Up to reply!