Math. Ausdruck von Methoden

  • Moin moin!
    Ich habe hier so eine tolle Methode, die eine bestimmte positive Zahl einliest und sie dann durch 2 teilt, bis sie <= 0 ist. Dabei werden die Teilschritte gezählt und abschließend ausgegeben. Für die Leute, die keine Prosatexte mögen, auch so:

    int z = 0;
    while(n > 1)
    {
    n = n / 2;
    z++;
    }
    return z;

    Nun muss ich eine math. Formel finden, mit der ich auch auf das Ergebnis kommen kann. Wenn man bspw. ein paar Werte einsetzt, erhält man eine gewisse Tabelle:

    1: 0
    2: 1
    3: 1
    4: 2
    5: 2
    6: 2
    7: 2
    8: 3
    9: 3
    ...
    15: 3
    16: 4
    ...
    31: 4
    32: 5
    ...
    63: 5
    64: 6
    ...

    Math. gesehen müsste es sich ja um eine Quadratwurzel handeln? Aber bei 15 kommt bspw. ein falscher Wert. Oder stimmt das mit der Wrurzel doch? Und wie kommt man auf so eine Lösung überhaupt?

    Grüße von planlos123

  • damit ich es nicht ganz verrate sag ichs mal mit python:

    Code
    int(math.log(n,2))

    [edit]als zusaetzlichen hint:

    Code
    n = n / 2;

    immer dieser obfuscated code ;)
    falls du gerne bits schupfst, dann koennte es hilfreich sein wenn du weiszt dass ein '/ 2' gleich mit einem '>> 1' ist. wenn du dann verstehst was das programm macht, dann sollte auch der 2er-log sinn ergeben.[/edit]

    Willfähriges Mitglied des Fefe-Zeitbinder-Botnets und der Open Source Tea Party.

    Einmal editiert, zuletzt von Kampi (1. Dezember 2009 um 16:15)

  • 1) ist in der while absichtlich > 1 und nicht >0?
    2) wenn es >0 macht es nichts anderes als die länge der zahl in binärer darstellung zu zählen, bei >1 seh ich denn sinn dahinter noch nicht ganz...
    3) der abgerundete ld von Kampi ist der beste tipp wenn es tatsächlich >1 ist...
    (bei >0 wäre das ergbnis aufzurunden)

    Thomas


  • 2) wenn es >0 macht es nichts anderes als die länge der zahl in binärer darstellung zu zählen, bei >1 seh ich denn sinn dahinter noch nicht ganz...

    ob es sonderlich sinnvoll ist sei dahingestellt, aber so zeigt das ergebnis das hoechste [tex='2^{wievielte}'][/tex]

    bit das man anpatzen muss um die zahl darstellen zu koennen.

    zb 7: das hoechste ist das 2^2er (und dann halt noch 2^1 und 2^0).

    Willfähriges Mitglied des Fefe-Zeitbinder-Botnets und der Open Source Tea Party.

  • ob es sonderlich sinnvoll ist sei dahingestellt, aber so zeigt das ergebnis das hoechste

    [tex='2^{wievielte}'][/tex]

    bit das man anpatzen muss um die zahl darstellen zu koennen.

    zb 7: das hoechste ist das 2^2er (und dann halt noch 2^1 und 2^0).

    schon klar, aber wenn mans in dem zusammenhang braucht, geht man normalerweise ja gleich vom ld aus... wie auch immer...

    Thomas

  • schon klar, aber wenn mans in dem zusammenhang braucht, geht man normalerweise ja gleich vom ld aus

    natuerlich. das beispiel schaut aber nach einer hausaufgabe aus bei der man eben drauf kommen soll dass man den ld verwenden soll...

    Willfähriges Mitglied des Fefe-Zeitbinder-Botnets und der Open Source Tea Party.

  • natuerlich. das beispiel schaut aber nach einer hausaufgabe aus bei der man eben drauf kommen soll dass man den ld verwenden soll...


    Und ihr habts es verraten :)

    Naja, jetzt muß er halt noch draufkommen, wie man den ld ausrechnet, wenn der in der Math Library nicht extra implementiert ist.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!