Schneller Algorithmus für Potenzen mit Exponenten aus den reellen Zahlen



  • WebFritzi schrieb:

    Nichts, aber der Logarithmus müsste bei Jesters Lösung auch noch berechnet werden.

    Für den es doch auch eine Potenzreihe gibt....



  • Jau, aber nur in [1,2].



  • WebFritzi schrieb:

    Jau, aber nur in [1,2].

    Reicht ja im Grunde aus.

    ϕ:=log2(x)\phi := \lfloor log_2(x) \rfloor

    Dann ist

    ln(x)=ϕln(2)+ln(x2ϕ)ln(x) = \phi \cdot ln(2) + ln(\frac{x}{2^{\phi}})

    Somit kann die Reihendarstellung des ln verwendet werden und Phi kann ja relativ einfach durch wiederholtes Teilen berechnet werden.

    Aber eigentlich nur eine Spinnerei. Wirklich effizient dürfte das nicht sein.

    Das Ausgangsproblem würde ich mit dem Newton-Verfahren näherungsweise lösen.



  • space_ schrieb:

    Das Ausgangsproblem würde ich mit dem Newton-Verfahren näherungsweise lösen.

    Öhm, wie das?



  • Also ich sehe Jesters Lösung immer noch als die Beste an, denn wenn die Basis negativ ist, dann ist bei dem Algorithmus eh eine komplexe Zahl als Lösung fällig, sei das der Fall, fängt man halt alle negativen Basen ab, ist sie negativ, aber der Zähler des Exponenten positiv, gehts auch wie gehabt weiter, andernfalls abfangen, komplexe Lösung bestimmen... darüber hinaus sind sicherlich die meisten anderen Lösungen zu umfangreich und rechenintensiv.



  • Winn schrieb:

    wenn die Basis negativ ist, dann ist bei dem Algorithmus eh eine komplexe Zahl als Lösung fällig

    Quatsch!



  • WebFritzi schrieb:

    space_ schrieb:

    Das Ausgangsproblem würde ich mit dem Newton-Verfahren näherungsweise lösen.

    Öhm, wie das?

    Da man bei einem irrationalen Exponenten r sowieso verloren hat (ich geh mal davon aus, dass es hier um ein entsprechendes Programm geht. Für exakte Werte nimmt man halt die Reihen), approxmiert man die Zahl einfach durch eine rationale Zahl p/q.

    Nun einfach ausnutzen, dass
    a^{p/q} = \sqrt[q]{a^p}

    D.h. gesucht ist x mit
    x = \sqrt[q]{a^p}

    Gleichbedeutend (naja): Gesucht ist eine Nullstelle von
    f(x)=xqapf(x) = x^q-a^p

    Iterationsverfahren:
    xn+1=x_nf(x_n)f(x_n)=x_nx_nqapqx_nq1x_{n+1} = x\_n - \frac{f(x\_n)}{f'(x\_n)} = x\_n - \frac{x\_n^q-a^p}{q \cdot x\_n^{q-1}}

    Geeignet vereinfachen, Startwert "passend" wählen und lositerieren.

    Also nochmal: wie berechnest du mit deiner Methode (-2)3?

    Bei negativer Basis sind sowieso nur ganzzahlige Exponenten möglich. Also in dem Spezialfall einfach via Schulmethode: -2 * -2 * -2. Zeitaufwand: O(n)
    Das geht aber auch in O(log n), womit ebenfalls x^q und a^p aus der obigen Iterationsvorschrift berechnet werden können.



  • WebFritzi schrieb:

    Winn schrieb:

    wenn die Basis negativ ist, dann ist bei dem Algorithmus eh eine komplexe Zahl als Lösung fällig

    Quatsch!

    Na sicher, wenn die Basis negativ und der Zähler des Exponenten ungerade ist, folgt ein negativer Wert, der wenn noch eine Wurzel gezogen werden muß zu einer komplexen Zahl führt... das steht aber auch im Text, zwar ein Zeile später, als jene die Du zitiert hast, aber sie steht dort...



  • Winn schrieb:

    Na sicher, wenn die Basis negativ und der Zähler des Exponenten ungerade ist, folgt ein negativer Wert, der wenn noch eine Wurzel gezogen werden muß zu einer komplexen Zahl führt...

    Wenn man keine Ahnung hat... du weißt schon. Beispiel: (1)5/3(-1)^{5/3}. Aber du hattest recht. Es kommt tatsächlich eine komplexe Zahl raus, aber keine mit nicht verschwindendem Imaginärteil. Und das Gegenteil war sicher deine Behauptung. Für die Zukunft: In mathematischen Diskussionen mit mir wirst du meist den kürzeren ziehen.

    @space: Guter Ansatz! 🙂



  • WebFritzi schrieb:

    Für die Zukunft: In mathematischen Diskussionen mit mir wirst du meist den kürzeren ziehen.

    Das kann sehr gut sein... mir ist nun aber der Geschmack dieser Ansage fadig. Und hat in einem Forum meiner Meinung nach nichts zu suchen. Und das... hatte ich Dir schonmal gesagt.



  • Sorry, hatte den ;)-Smiley am Ende vergessen. 😉



  • Asooo 🙂 gg, is schon nen Kreuz, wenn man jemanden nur lesen kann und seine Intention dann falsch interpretiert 🙄 😉 ... Schwamm drüber 👍



  • Hallo,

    entschuldigung, dass ich mich erst jetzt wieder melde. Ich kann in letzter Zeit nur sehr wenig ins Internet. Ich war, als ich diesen Thread eröffnet hab, sehr unter Zeitdruck. Deshalb hab ich mich wirklich schlecht ausgedrückt. Ich gelobe Besserung 😉

    So, nun mal eine richtige Beschreibung: Ich schreibe meine eigene Klasse für große Zahlen (als Übung). Bei den Potenzen habe ich jetzt allerdings das Problem, dass ich nicht weiß, wie man sie ausrechnet, wenn der Exponent nicht ganzzahlig ist. Ich habe weiter oben versucht, den Exponenten auf eine ganze Zahl zu bringen. Das hab ich nicht rüber gebracht.

    Deshalb ist Jesters Vorschlag nicht das, was ich suche, denn bei seiner Methode bleibt im Exponenten eine Kommazahl.

    Es tut mir wirklich leid, dass ich mich so schlecht ausgedrückt habe und dass ich nicht früher gesagt habe (sagen konnte), worauf ich hinauswill.

    Es wäre schön, wenn mir jemand sagt, wie man effizient Potenzen ausrechnen kann, deren Exponent nicht ganzzahlig ist. Dabei können auch ganz andere Methoden benutzt werden.

    PS: Jester hat recht, mir geht es nur um die reellen Zahlen. Wenn \sqrt[b]{-|a|}, will ich eine Exception werfen.

    PPS: Und kommt mir bitte nicht mit Axiomen, Taylor-Reihen oder was weiß ich. Habt bitte Rücksicht mit einem armen Achter und erklärt alles, was über die Logarithmen hinausgeht.


Anmelden zum Antworten