Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#3

Re: Unbegrenzt viele Nachkommastellen

  Alt 22. Jan 2004, 10:33
Zitat:
Ich hab den Binary-Splitting mal "entmüllt" und auf die NPi-Berechnungen angewandt. Der Fast-Chudnovsky wurde bei 500.000 Nachkommastellen tatsächlich 16 ms schneller.
Jo ich weis, mein derzeitiger Source ist so ziemlich kompliziert und verworren. Ich überlege schon seit damals ob es nicht besser wäre erst mal alle Pi-Callback-Resultate in einem rießig großen Zahlenarray zu speichern. Nun wird mit einem cleveren Softwarealgorithmus die Gemeinsamme Produktbildung innerhalb des Binary Splittings codiert. D.h. dieser neue Binary Splitting Algo. eleminiert als Formaloptimierung ALLE redunadanten Multiplikationen.

Aber du könntest mir mal deine Umsetzung mailen.

Zitat:
Du hast doch auch gepostet, es gäbe "Höherdimensionale" Varianten des Chudnovsky-Algos. Was haben wir dabei unter "Höherdimensional" zu verstehen, und vor allem, wie funktioniert er?
Jay, höherdimensional in zwei Punkten:
1.) man benötigt Rationale Zahlen oder eben Fließkommaarithmetik, dies bringt aber eine gewisse "Unsicherheit" in der Genauigkeit mit sich. D.h. die Dimension in der der Programmiere/Mathematiker seinen Algo. überdenken muß wird höher.
2.) die Formel ansich arbeitet in höherer Dimension, aber dazu solltest du die einschlägigen WEB Seiten/PostScripts studieren. Ich bin einer der Mathematik am liebsten macht wenn ein Problem auch nur mit Halbwissen zu lösen ist. D.h. auch ich verstehe nicht jede Formel zu 100% in all ihren Abgründen, trotzdem kann ich sie programmieren. Nun diese 31 Stellen Chundnovsky Formel ist so ein Monster.

Zitat:
Komm, gib nur die Formeln an, ich will auch mal denken!
Puh, da muß ich erst selber in meinen ganzen PDF/PostScripts suchen. Hier kann ich die Formel auf alle Fälle nicht lesbar posten.

Zitat:
Und: wie berechnet man die Euler-Zahl e?
NExp() ist die Funktion die du suchst.

Delphi-Quellcode:
procedure NExp(var A: IInteger; U,V: Integer);
// A = A * e^(U / V)
Umgeschrieben bedeutet das für dich

A = A * e^(1/1) = A * e^1 = A * e.
Du setzt A z.B. auf A = 10^500000 und rufst danach NExp(A) auf, schon hast du A = e * 10^500000, also die 500000 Dezimalstellen von e.

Gruß Hagen
Angehängte Dateien
Dateityp: ps ti-97-7.ps (452,7 KB, 56x aufgerufen)
  Mit Zitat antworten Zitat