Autor |
Beitrag |
Spaceguide
Beiträge: 552
(D3/D7/D8) Prof.
|
Verfasst: Do 13.01.05 01:56
Probiers doch mal mit einer Potenzreihe.
Hint: Sowas wie ln(x):=sum((-1)^(k+1)*(x-1)^(k)/k,k=1..infinity);
|
|
st-matze
Beiträge: 138
Win 3.11, Win 95, Win 98, Win XP
D7 Ent, D6 Pers, (D5 Pers)
|
Verfasst: Do 13.01.05 09:20
Berechnung für den natürlichen Logarithmus
oder die Näherung
in beiden fällen gilt: je höher n, desto genauer
more ...
st-matze
|
|
st-matze
Beiträge: 138
Win 3.11, Win 95, Win 98, Win XP
D7 Ent, D6 Pers, (D5 Pers)
|
Verfasst: Do 13.01.05 09:33
hier noch mal ein Codeschnipsel zu einem Logarithmus berechnungs verfahren:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| function log(x: Double; n: Integer): Double; var p,q: Extended; i: Integer; begin p:=1; q:=x; for i:=1 to n do begin q:=sqrt(q); p:=p*2/(q+1/q); end; log:=p*(x-1/x)/2; end; |
Hinweis: für n >= 30 ist die abweichung zur eingebauten delphifunktion irrelevant.
more ...
st-matze
|
|
Spaceguide
Beiträge: 552
(D3/D7/D8) Prof.
|
Verfasst: Do 13.01.05 11:22
Also eine Wurzelfunktion zum Berechnen des ln zu verwenden ist nicht wirklich zu empfehlen.
|
|
st-matze
Beiträge: 138
Win 3.11, Win 95, Win 98, Win XP
D7 Ent, D6 Pers, (D5 Pers)
|
Verfasst: Do 13.01.05 11:33
niemand hat gesagt, dass es effektiv ist, aber es funktioniert
|
|
raziel
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: Do 13.01.05 13:25
Und wenn man den ganzen thread gelesen hätte, hätte man gesehen, dass der Link bereits von mir gepostet wurde...
_________________ JSXGraph
|
|
st-matze
Beiträge: 138
Win 3.11, Win 95, Win 98, Win XP
D7 Ent, D6 Pers, (D5 Pers)
|
Verfasst: Do 13.01.05 13:31
@raziel
nich gleich beleidigt sein.
les mir halt nicht alles exakt durch.
und einen neuen link hab ich ja auch gebracht
|
|
ScorpionKing
Beiträge: 1150
Win XP
|
Verfasst: Do 13.01.05 14:07
ja, ich habe es eingesehen, es gibt also keine formel für den logarithmus, genauso wenig wie für wurzeln.
danke an alle!
_________________ Aus dem Urlaub zurück!
|
|
tommie-lie
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Do 13.01.05 14:17
ScorpionKing hat folgendes geschrieben: | ja, ich habe es eingesehen, es gibt also keine formel für den logarithmus |
Wieso? Oben hat doch st-matze sogar die Vorschrift einer Reihe als Bild eingefügt
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
jasocul
Beiträge: 6388
Erhaltene Danke: 146
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Do 13.01.05 14:21
Reihen werden in der 8. Klasse aber noch nicht behandelt. Und wenn unser König damit noch nie was zu tun gehabt hat, ist das nicht ganz einfach zu verstehen. Zumal es hier auch eine nicht endliche Reihe ist.
|
|
tommie-lie
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Do 13.01.05 14:30
jasocul hat folgendes geschrieben: | Reihen werden in der 8. Klasse aber noch nicht behandelt. |
Sind aber nicht wirklich kompliziert.
jasocul hat folgendes geschrieben: | Und wenn unser König damit noch nie was zu tun gehabt hat, ist das nicht ganz einfach zu verstehen. Zumal es hier auch eine nicht endliche Reihe ist. |
Nuja, sie geht bis n
Aber selbst wenn er mit der Folge nicht zurechtkommt, in der Näherung kommt nichts vor, was sonderlich schwer ist, und ich glaube Wurzeln gab's schon in der 8.
Und 'n Codeschnipsel hatter ja auch noch gepostet.
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
IngoD7
Beiträge: 629
D7
|
Verfasst: Do 13.01.05 14:34
ScorpionKing hat folgendes geschrieben: | ja, ich habe es eingesehen, es gibt also keine formel für den logarithmus, genauso wenig wie für wurzeln.
|
Huch, fast genau mein Wortlaut.
Wo ich doch schon die ganze Zeit überlege, wie ich mich am besten wegen dieser unpräzisen (wenn nicht sogar falschen) Aussage rausreden kann.
Ausdrücken wollte ich eigentlich, dass das, was es dazu an "Bestimmungsalgorithmen" gibt, niemals das sein kann, was ScorpionKing gesucht hatte (mühsame Näherungen, möglichst unendliche Reihen und dergleichen). Daraus aber gleich die Aussage zu kreieren, dass es keine Formeln gäbe, wie ich es im Wortlaut getan habe, ist im besten Falle als nicht ganz korrekt zu bezeichnen.
Bekenne mich also auch schuldig.
|
|
Vertigo
Hält's aus hier
Beiträge: 1
Win XP
D6 Pers
|
Verfasst: Sa 12.03.05 13:40
Ja, der Thread ist zwar jetzt etwas älter, aber für die Berechunung eines beliebigen Logarithmus gilt doch:
logex=ln(x)/ln(e)
...ist vielleicht die einfachste Möglichkeit (aber sicher nicht die effektivste), um einen Logarithmus in Delphi zu berechnen.
|
|
BenBE
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Sa 12.03.05 16:20
Wenn man den beliebigen Logarithmus in ASM implementiert, kommt man besser mit der Nutzung des Dualen Logarithmus, da die FPU diesen intern zur Berechnung hernimmt.
OMathGeneral.pas der Omorphia-Bibliothek 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| Function LogN(Var Base, X: Extended): Extended;
Asm FLD1 FLD TBYTE PTR [X] FYL2X FLD1 FLD TBYTE PTR [Base] FYL2X FDIVP End; |
Für den natürlichen Logarithmus wären zwar keine Zusatzschritte notwendig, jedoch dauert das Abfragen der Konstante FLDLN2 länger als das laden der Zahl 1.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
zemy
Beiträge: 207
Win XP Prof.
D7
|
Verfasst: Mi 16.03.05 17:35
IngoD7 hat folgendes geschrieben: | Es gibt für "Logarithmus" ebensowenig eine Formel, wie es eine für "Wurzel" gibt. Es ist - wie erklärt man das bloß?? - eine eigenständige mathematische Funktion. Die hat keine Übersetzung in Form einer Formel. Wie gesagt, genau so, wie beim Wurzelziehen. |
Die Multiplikation kann man auch über eine Addition darstellen, obwohl es eine eigene Operation ist... Genauso gibt es Formeln für den Logarythmus, auch wenn die Berrechnung umständlich ist und auf Zahlenfolgen basiert. Ist eigentlich nicht Wikipedia die erste Seite der Wahl bei solchen Themen? Da gibts auch die komplette Lösung inkl. Berrechnungsverfahren. ( de.wikipedia.org/wiki/Logarithmus) Trotzdem sollte man das nur mal zum Test proggen, 1 ASM-Befehl im Vetrgleich zu dieser Rechenvorschrift... Nja OK
_________________ LifeIsToShortToThinkAboutTheShortness
|
|
Allesquarks
Beiträge: 510
Win XP Prof
Delphi 7 E
|
Verfasst: Mo 21.03.05 15:25
Natürlich ist der eine asm Befehl schneller. Die Fpu rechnet aber mit einer 64 Bit Mantisse. Da kommen dann rund 20 gültige Stellen im Dezimalsystem raus. Für die meisten Fälle sollte das genug sein, aber eben nicht immer.
Randnote: Der Sinus,tangens etc lässt sich auch über Reihen berechnen.
Probier mal aus den Tangenswert nahe pi zu berechnen einmal mit der math-unit in Delphi und einmal mit dem windows taschenrechner und dann noch einmal über so eine Reihe. Der Fehler liegt dann schon in der 6-7 Dezimalstelle ist also nicht nur ein Rundungsfehler?!
|
|
IngoD7
Beiträge: 629
D7
|
Verfasst: Mo 21.03.05 16:25
zemy hat folgendes geschrieben: | IngoD7 hat folgendes geschrieben: | Es gibt für "Logarithmus" ebensowenig eine Formel, wie es eine für "Wurzel" gibt. | Genauso gibt es Formeln für den Logarythmus, [...] |
Hättest du den Thread aufmerksam durchgelesen, so hättest du gemerkt, dass wir (so also auch ich) schon lange zu der Erkenntnis gekommen waren.
|
|
D-Developer
Hält's aus hier
Beiträge: 6
|
Verfasst: Mo 21.03.05 16:33
Spaceguide hat folgendes geschrieben: | Also eine Wurzelfunktion zum Berechnen des ln zu verwenden ist nicht wirklich zu empfehlen. |
So weit ich weiß berechnet Delphi Potenzen mit dem ln...
|
|
zemy
Beiträge: 207
Win XP Prof.
D7
|
Verfasst: Mo 21.03.05 19:40
_________________ LifeIsToShortToThinkAboutTheShortness
|
|