Entwickler-Ecke

Algorithmen, Optimierung und Assembler - x. wurzel ziehen


blocade - Do 21.07.05 21:08
Titel: x. wurzel ziehen
hab folgendes problem.
ich will z.b. die 30. wurzel aus einer bestimmten zahl ziehen.
die 2. wurzel macht man ja einfach mit SQRT(), aber wie kann ich mit z.b. der 30. wurzel machen? oder 17. wurzel? bzw. die nte wurzel ...

mfg
blocade


Felux - Do 21.07.05 21:16

Probiers doch mal mit Potenzen.

Wenn ich mich richtig erinnere war das so:


Delphi-Quelltext
1:
power(Basis, (1/30))                    



Hoffentlich ist das jetz richtig... :)


Ich Bins - Do 21.07.05 21:39

abgesehen von einer Klammer zu passt das :wink:


AXMD - Do 21.07.05 21:43

Oder ohne Power: Exp(1/30 * Ln(x)); ;)

AXMD


blocade - Fr 22.07.05 02:49

ah, ok, alles klar, danke! :)
@axmd: exp(1/30) * ln(x)) heißt nichts weiter als e^(1/30*ln(x)) oder? also praktisch x*(1/30) !!?


AXMD - Fr 22.07.05 09:34

user profile iconblocade hat folgendes geschrieben:
ah, ok, alles klar, danke! :)
@axmd: exp(1/30) * ln(x)) heißt nichts weiter als e^(1/30*ln(x)) oder? also praktisch x*(1/30) !!?


Es heißt e^(1/30*ln(x)), aber nicht x*(1/30), sondern x^(1/30) ;)

AXMD


harryp - So 31.07.05 10:51

Man könnte aber auch einfach das Wurzel-Verfahren nach Heron verwenden. Geht schnell, ist einfach zu programmieren und liefert ziemlich genaue Ergebnisse.


delfiphan - So 31.07.05 13:47

user profile iconharryp hat folgendes geschrieben:
Man könnte aber auch einfach das Wurzel-Verfahren nach Heron verwenden. Geht schnell, ist einfach zu programmieren und liefert ziemlich genaue Ergebnisse.

IMHO ist Power(x,1/n) aber schneller, einfacher zu implementieren, und genauer (bzw. mindestens gleich genau).


LigH - Di 02.08.05 21:57

Nur kann es sein, dass man für "Power()" die Math-Unit braucht. Wer die also in seiner einfachen Delphi-Variante nicht haben sollte (kann mich erinnern, dass die bei früheren Delphi-Versionen gern mal erst ab "Professional" mitgeliefert wurde), der muss eventuell nach Ersatz schauen (z.B. Jedi Code Library: JclMath).


Gausi - Di 02.08.05 22:04

..Oder einfach die Variante nehmen, die AXMD vorgeschlagen hat :roll:


delfiphan - Mi 03.08.05 01:56

Kleine Anmerkung: Exp(b*Ln(a)) ist nur für bestimmte Werte äquivalent zu power().
Mit der ersten Variante ist es z.B. nicht möglich, Potenzen aus negativen Basen zu berechnen.
Beim Wurzelziehen sollte es aber keine Schwierigkeiten geben, da die Wurzel aus einer negativen Zahl in R ohnehin nicht defniniert ist.


AXMD - Mi 03.08.05 09:26

user profile icondelfiphan hat folgendes geschrieben:
Kleine Anmerkung: Exp(b*Ln(a)) ist nur für bestimmte Werte äquivalent zu power().
Mit der ersten Variante ist es z.B. nicht möglich, Potenzen aus negativen Basen zu berechnen.
Beim Wurzelziehen sollte es aber keine Schwierigkeiten geben, da die Wurzel aus einer negativen Zahl in R ohnehin nicht defniniert ist.


Wenn ich Zeit habe, stell ich meine komplexe Unit online. Mit komplexen Exp bzw. Ln sollten dann auch negative Hochzahlen funktionieren ;)

AXMD