Potenzberechnung

  1. 7 months ago

    Stefan M

    6 Oct 2018 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

    6 Oct 2018 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

    6 Oct 2018 Pre-Release Testers, Xojo Pro Germany
    Edited 7 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

    6 Oct 2018 Pre-Release Testers 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

    6 Oct 2018 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

    7 Oct 2018 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

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

    Ah, OK.
    Das sieht gut aus. Danke.

or Sign Up to reply!