Entwickler-Ecke
Sonstiges (Delphi) - natürlichen Logarithmus riesieger Fibunaccizahlen berechnen
fibber - So 17.01.10 16:31
Titel: natürlichen Logarithmus riesieger Fibunaccizahlen berechnen
Hallo,
ich muss für eine Projektarbeit den natürlichen Logarithmus einiger recht großer Fibunacci Zahlen berechnen und würde dies gerne in Delphi bzw. Lazarus realisieren. Nur leider weiß ich nicht wie ich das bewerkstelligen soll. Den Logarithmus benötige ich auf zwei Nachkommastellen genau (abgeschnitten, nicht gerundet).
Die ersten Logarithmen konnte ich bereits mit wolframalpha berechnen (log(fib[x])).
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| x > log(fib[x]) 15 > 6,41 150 > 71,37 1.500 > 721,01 15.000 > 7217,37 150.000 > 72180,96 1.500.000 > 721816,93 15.000.000 > 7218176,57 150.000.000 > ? 1.500.000.000 > ? 15.000.000.000 > ? 150.000.000.000 > ? 1.500.000.000.000 > ? 15.000.000.000.000 > ? 150.000.000.000.000 > ? 1.500.000.000.000.000 > ? |
Bitte helft mir dabei, die Berechnung mittels Delphi zu realisieren.
Ich hab keine Ahnung wie ich mit so riesigen Zahlen in Delphi rechnen soll.
Zum Berechnen der Fibunacci Zahlen würde ich die folgende Näherungsformel verwenden.
fib[x] = (1/sqrt(5))*((1+sqrt(5))/2)^x
Beim Logarithmus weiß ich auch nicht so recht weiter.
Wahrscheinlich muss man erst den den log_2 berechnen, da sich dieser recht schnell berechnen lässt,
und anschließend eine Basisumrechnung vornehmen.
http://de.wikipedia.org/wiki/Logarithmus
http://de.wikipedia.org/wiki/Fibonacci-Folge
Viele Grüße,
Anja F.
BenBE - So 17.01.10 16:39
Schau Dir mal von mir die BigNum2-Unit an. Damit geht das Problemlos. Allerdings (wichtige Einschränkung) ist die auf Ganzzahlen ausgelegt; für Fließkommazahlen müsstest du also selber etwas Hand anlegen.
Hidden - So 17.01.10 16:47
Hallo,
Meiner unmaßgeblichen Meinung nach lässt sich da mit den Rechenregln für den Logarithmus noch etwas umformen: ln((1/sqrt(5))*((1+sqrt(5))/2)^x) = :?:.. (ich will dir ja nicht den ganzen Spaß nehmen :mrgreen:).
Wofür brauchst du das ganze überhaupt? Wenn das vom Lehrer kommt, musst du sicher noch was umformen ;) Eventuell kannst du auch eine sehr viel grobere Näherung nehmen, die sich dafür besser umformen lässt(die ersten 2 Nachkommastellen sollten halt noch stimmen, da ist ein bisschen Spielraum).
Allgemein kann man in Delphi für große Zahlen entweder den Datentyp Int64 nehmen, oder eine der hier im Forum verfügbaren Units à la BigNum, ..
mfG,
BenBE - So 17.01.10 16:51
Ja, das lässt sich indeed ;-) Ich komme auf eine Addition, eine Multiplikation und eine Konstante ;-)
fibber - So 17.01.10 17:03
Hidden, ich danke dir. Manchmal sieht man den Wald vor lauter Bäumen nicht :oops:
Viele Grüße,
Anja F.
Hidden - So 17.01.10 17:12
Hi :) (und estmal :welcome: im Delphi-Forum, ich hab' gar nicht gesehen, dass du neu bist :beer:)
Und dann ist die Münze sofort ganz gefallen? Das ging ja dann trotzdem noch recht schnell :zwinker:
lg,
fibber - So 17.01.10 17:30
Danke für die Willkommensgrüße :)
Ja, die Münze ist äußerst schnell gefallen.
Falls es jemanden interessiert:
ln((1/sqrt(5))*((1+sqrt(5))/2)^x) = x*(ln((1+sqrt(5))/2)))+ln(1/sqrt(5))
Viele Grüße,
Anja F.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!