Bald ist der Februar zu Ende, es wird März und damit naht auch zwangsläufig der 14. März. Der internationale Pi-Tag. Und als Botschafter der Zahl Pi wird es langsam Zeit, dem Thema “Pi” wieder mehr Aufmerksamkeit zu widmen.

Die Zahl Pi hat unendliche viel Nachkommastellen. Und weil es eine besonders wichtige und besonders coole Zahl ist, wurde sie von vielen Menschen als Hobby gewählt. Sie lernen zum Beispiel die Folge der Nachkommastellen auswendig und der Rekord wird zur Zeit vom Chinesen Chao Lu gehalten, der 67.890 Stellen im Kopf hat. Der beste Deutsche, Jan Harms, kommt auf 9.140 Stellen. Um Mitglied im Verein “Freunde der Zahl Pi” zu werden, muss man nur 100 Stellen auswendig können. Und selbst das sind eigentlich noch 62 Stellen zu viel. Denn bei allen praktischen Anwendungen kommt man mit maximal 39 Ziffern, das heißt 38 Nachkommastellen aus. Wenn man den Umfang des gesamten Universums berechnen will und der Fehler dabei kleiner als der Durchmesser eines Wasserstoffatoms sein soll, dann sind 38 Nachkommastellen ausreichend. Die neue Folge von numberphile erklärt das recht anschaulich:

Natürlich gibt es trotzdem noch technische Anwendungen, die die Berechnung von Billionen Nachkommastellen rechtfertigen. So testet man zum Beispiel die Performance von Supercomputern. Aber man muss auch nicht alles im Leben rechtfertigen! Welchen Zweck hat ein Gemälde, das im Museum hängt? Welchen Zweck hat ein Musikstück oder eine schöne Landschaft? Wenn wir Menschen nur “sinnvolle” Dinge machen, die einen konkreten Zweck haben, dann wären wir Maschinen und keine Menschen. Wir brauchen die Beschäftigung mit der Sinnlosigkeit. Wir sollten unser Leben nicht immer in ein Korsett der zwanghaften Sinnhaftigkeit zwängen. Sondern Dinge auch einfach mal machen, egal ob sie einen Zweck haben oder nicht. Wenn mehr als 39 Stellen von Pi keinen “Zweck” haben, ist das erst recht ein Grund, so viele davon wie möglich zu kennen! Einfach so. Ohne Zweck.

Kommentare (36)

  1. #1 THeintz
    Jena
    25. Februar 2013

    Ich kann den letzten Sätzen uneingeschränkt zustimmen – das ist es, was uns zum Menschen macht!

  2. #2 Berlin
    25. Februar 2013

    Es gibt ja sogar einen Roman, bei dem eine Botschaft des
    Schöpfers in der Zahl enthalten ist:
    http://de.wikipedia.org/wiki/Contact_%28Roman%29
    Da lohnt sich die Mühe doch…
    Bernhard

  3. #3 Wurgl
    25. Februar 2013

    25 Stellen mehr und es wird tatsächlich sinnfrei. Denn dann ist die Genauigkeit in der Größenordnung der Planck-Länge.

    Ich weiß noch wie ich und später dann mein Bruder auf den tollen Rechnern der späten 70er Jahre, also TI-59 III und TRS-80, bzw. mit Lochkartenstapeln bei den drei Buchstaben im Rahmen eines Schulversuchs tolle Reihenentwicklungen gemacht haben. 200 Stellen zu berechnen war schon der Hammer, weil da war entweder die Rechenzeit zu Ende (bei den drei Buchstaben) oder Speicher war aus (oder Mutter brauchte die Steckdose wo der Rechner dran war zum Staubsaugen). Mein Bruder hat damals Pi auch aufsagen können, weiß echt nicht mehr wie viele Stellen, aber waren schon einige. Ich kann heute grad die ersten 8 aus dem Stegreif. Bis so 20 herum kommen mir beim Lesen die Ziffernfolgen bekannt vor und dahinter ist alles veralzheimert.

  4. #4 Eol
    Klagenfurt
    25. Februar 2013

    Und Florian – sind die 100 Stellen (noch) hängengeblieben ?

  5. #5 Merit-Seto
    25. Februar 2013

    ” der Rekord wird zur Zeit vom Chinesen Chao Lu gehalten, der 67.890 Stellen im Kopf hat(…)Jan Harms, kommt auf 9.140 Stellen.”
    Wow… was für eine wahnsinnige Leistung! Immer wieder faszinierend, wozu das menschl. Gehirn fährig ist.

  6. #6 Rainer Zueni-Smous
    Irrhausen
    25. Februar 2013

    Es ist gut, wenn man noch ein paar Nachkommastellen mehr von Pi weiß. Da sich das Universum ausdehnt, braucht man bald mehr Stellen für die gleiche Genauigkeit.
    Da sich das Universum immer schneller ausdehnt, kann man jetzt auch ausrechnen, wann man mit der Neuberechnung von Nachkommastellen nicht mehr hinterherkommt, wenn man einen bestimmten Fehler nicht überschreiten möchte.

    @Wurgl: Da merkt man wie mann alt wird, Lochkartenlesen konnte ich auch mal. (Ohne den Aufdruck am oberen Rand 😉 )

  7. #7 Zockerjoe
    25. Februar 2013

    >Wenn man den Umfang des gesamten Universums berechnen will

    Ist das Universum kugelförmig?

  8. #8 Florian Freistetter
    25. Februar 2013

    @Zockerjoe: Auf jeden Fall das sichtbare Universum. Das ist eine kugelförmige Region die all das umfasst, was das Licht bisher erreichen konnte.

  9. #9 Björn
    25. Februar 2013

    Mich faszinieren ja immer besonders die Stellen an denen man Pi begegnet, wo man es nicht erwartet…

    Bei einem natürlich mäanderndem Wasserlauf z.B – Luftstrecke Quelle – Meer x Pi = Länge Fluss kommt der realen Länge des Wasserlaufs meist erstaunlich nahe. Mich interessiert ja schon lange, ob das auch für z.b. Trampelpfade gilt die in einem unwegsamen Gelände ohne Sicht auf das Ziel längere Strecken überbrücken…

  10. #10 Florian Freistetter
    25. Februar 2013

    @Björn: “Bei einem natürlich mäanderndem Wasserlauf z.B – Luftstrecke Quelle – Meer x Pi = Länge Fluss kommt der realen Länge des Wasserlaufs meist erstaunlich nahe. “

    Und bei dem Thema hat sogar Einstein seine Finger im SPiel gehabt. Einstein, der am 14.3 geboren wurde… Siehe hier:http://scienceblogs.de/astrodicticum-simplex/2011/03/14/albert-einstein-die-zahl-pi-und-die-maanderbildung-bei-flussen/

  11. #11 Rainer Steinmeier
    Paderborn
    25. Februar 2013

    Ich habe noch den Vers aus meiner (Berufs-!!)schulzeit über die ersten 35 Nachkommastellen von PI.

    Gib, o Gott o Guter, Pizeichen du Bruder; lasse den Edlen
    3, 1 4 1 5 9 2 6 5 3 5
    behenden göttliche Größen verwenden. Gib es ihm
    8 9 7 (ß=ss) 9 3 2 3
    maßvoll, wenn werken er weiter soll. Mit dem Bemerken hat
    8 (ß=ss) 4 6 2 6 4 3 3 8 3
    er endlich erreichet: Einer Null am Schlusse gleichet.
    2 7 9 5 0 2 8 8

    Sicher ist der Spruch etwas holpriger als der bekanntere “Wie, o dies Pi macht …” ; dafür hat er einige Nachkommastellen mehr ;–) Ich hoffe nur, die Zifffern stehen richtig unter den Worten.

  12. #12 Steppenwolf
    25. Februar 2013

    Aussage meiner Großtante:
    (locker 30 Jahre her)
    “Halbmesser mal Halbmesser mal drei vierzehn Hundertstel”
    Schätze, das reicht fürs normale Leben.
    Was hätte Dr. Who dazu gesagt ?
    P.S.: Hi Florian. Ich teile Deine Begeisterung für diese Serie. Die Drehbücher sind einfach unschlagbar.

  13. #13 florian
    26. Februar 2013

    das ist doch ein deutsches blog hier, oder? Warum stellst du keine deutschen videos ein? Das andere versteht doch niemand

  14. #14 Moss the TeXie
    Ladenburg
    26. Februar 2013

    Ich muß mir das nicht merken, ich hab ’ne href=”http://www.lehmanns.de/shop/mathematik-informatik/7361329-9783865411303-pi-tasse-pi-3-14159265″>Tasse. 😉

  15. #15 Moss the TeXie
    Ladenburg
    26. Februar 2013

    Voriger Kommentar in korrekt:

    Ich muß mir das nicht merken, ich hab ’ne π-Tasse. 😉

    Sorry.

  16. #16 IchWerSonst
    26. Februar 2013

    “Wir brauchen die Beschäftigung mit der Sinnlosigkeit.”
    wie z.b. astrologie? SCNR! ^_^

  17. #17 Stefan W.
    http://demystifikation.wordpress.com
    26. Februar 2013

    Bis zum richtigen Pi-Tag, am 3.1.4159 werde ich 314 Stellen lernen, wenn ich dann noch lebe.

    Und bei dem Thema hat sogar Einstein seine Finger im SPiel gehabt.

    Wenn schon, dann würde ich im sPIel gehabt schreiben, oder im sπel gehabt :)

  18. #18 emreee
    26. Februar 2013

    “Das ist doch ein deutsches blog hier, oder? Warum stellst du keine deutschen videos ein? Das andere versteht doch niemand”

    Wäre von vorteil dadurch würden sicher mehr Leute hier mitwirken. Florian kann aber nichts dafür das die meisten Papers auf englisch sind .Das gleiche gilt auch für Videos dieser art ,Englisch wird einfach von viel mehr Leuten gesprochen :)

  19. #19 Andreas
    26. Februar 2013

    Uh. Wusste garnicht, was mein Duschvorhang für ein sinnloser Luxus ist. Da sind nämlich die ersten 950 Stellen von Pi drauf…

    http://www.getdigital.de/products/Duschvorhang_Pi

  20. #20 Florian Freistetter
    26. Februar 2013

    @florian ““Das ist doch ein deutsches blog hier, oder? Warum stellst du keine deutschen videos ein?””

    Das hier ist ein deutschsprachiges Blog, kein deutsches. Und es gibt nunmal eben leider keine deutschsprachigen Videos gleicher Qualität. Abgesehen davon sprechen genug Menschen auch in Deutschland englisch, um solche Videos zu verstehen. Englisch ist die internationale Verkehrssprache und vor allem die Sprache der Wissenschaft.

    ” Das andere versteht doch niemand”

    Naja, eigentlich verstehen auch in Deutschland sehr viele Leute englisch. Ich weiß nicht wie alt du bist. Aber wenn du unter 40 bist und eine halbwegs normale Schulbildung genossen hast, solltest du englisch eigentlich auch in der Schule gelernt haben…

    @emree: “Wäre von vorteil dadurch würden sicher mehr Leute hier mitwirken. “

    “mitwirken”? Wie soll ich das verstehen?

  21. #21 gnaddrig
    26. Februar 2013

    Wie wäre es mit einer Pi-Installation? Wenn man die derzeit bekannten 5 Billionen
    bekannten Nachkommastellen (Stand August 2010) über ein Anzeigeband laufen ließe, könnte man die Installation bei einer Stelle pro Sekunde 158.440 Jahre laufen lassen. Bei viel besser zur Kreiszahl passenden 3,14 Stellen pro Sekunde würde der Vorrat immer noch für 50.433 Jahre reichen, und bis dahin hat bestimmt jemand noch ein paar weitere Stellen ausgerechnet…

  22. #22 gnaddrig
    26. Februar 2013

    Wie sieht es bei diesen immens langen Ziffernkolonnen eigentlich mit dem Korrekturlesen aus. Hat mal wer die 10 Millionen von den Freunden der Zahl Pi gelieferten Stellen mit anderen Quellen abgeglichen?

  23. #23 Rob
    26. Februar 2013

    @Merit-Seto

    25. Februar 2013
    ” der Rekord wird zur Zeit vom Chinesen Chao Lu gehalten, der 67.890 Stellen im Kopf hat(…)Jan Harms, kommt auf 9.140 Stellen.”
    Wow… was für eine wahnsinnige Leistung! Immer wieder faszinierend, wozu das menschl. Gehirn fährig ist.”

    Ich würde eher sagen wollen, wie faszinierend es ist, wozu ein chinesisches Gehirn fähig ist. Das aus folgendem Grund: die pianistische Ausbildung in China ist dermassen unmenschlich. Da werden Kinder mit zwei drei Jahren in Ausbildungslager gesteckt, müssen bis zu 10 Stunden üben, damit aus Ihnen ein Wunderkind wird. Die, die es nicht schaffen, werden “weggeworfen”. Alles das in einer musikalischen Kultur, die mit unserer nicht das Geringste zu tun hat. Das ist typischer Kommunismus. Deswegen wundert es mich auch nicht mehr, wenn es mal wieder ein Chinese ist, der zu so etwas “fähig” ist.

    Bitte NICHT missverstehen! Aber ich mag diese Heranzüchtung von Maschinen gar nicht! Das ist absolut unmenschlich!

  24. #24 gnaddrig
    26. Februar 2013

    @ florian (#13): Wenn jemand kein Englisch kann und die verlinkten Videos deshalb nicht versteht, ist das natürlich schade. Aber es ist doch besser, wenigstens denen, die genug Englisch können, diese vertiefenden oder weiterführenden oder manchmal nur witzigen Videos anzubieten. Dann haben mehr Leute was davon, als wenn man auf die Verlinkung englischsprachiger Materialien von vornherein verzichtete. Schlimmstenfalls kann ein Teil des Publikums nichts mit den Links anfangen.

  25. […] Vorgestern hat sich jemand darüber beschwert, dass ich hier im Blog fast immer nur englischsprachige Videos […]

  26. #26 emreee
    27. Februar 2013

    Mitwirken wegstreichen, 😀 Mitbeteiligen meinte ich .

  27. #27 quantenspringer
    27. Februar 2013

    Also mir reicht 22/7
    Wers genauer haben will soll mit 355/113 glücklich werden :-)

  28. #28 Stephan
    27. Februar 2013

    70’000 Stellen. Wie macht man sowas, Chinese hin oder her… Wie schafft man ueberhaupt 10’000? Markierung der Ziffern mit Geschichten, Gegenstaenden und Gefuehlen und ab geht die Post oder was? Wahnsinn. Vermutlich werden 680 x 100er Pakete gelernt, jeden Tag 2 davon, dann ist man in einem Jahr durch. Oder??

  29. #29 DeLuRo
    7. März 2013

    Mal was Pragmatisches im Falle von Programmierung: ich frage die Bibliothek der anvisierten Sprache einfach mal nach einer Konstanten wie Math.PI oder ähnlich und bekomme dann die Genauigkeit die das System verarbeiten kann. Oder ich frage Werte wie acos(-1) oder asin(1) ab, denn es gilt:
    \pi=arccos(-1)=2\,arcsin\,1=4\,arctan\,1 .

    Bei den meisten Sprachen mit double-Genauigkeit im IEEE-Format (8 Byte = 52 Bit Mantisse, 11 Bit Exponent, 1 Bit Vorzeichen) erhalte ich dann wenigstens 12 Stellen hinter dem Komma; die Rechengenauigkeit liegt bei etwa 15 Stellen. Will ich mehr Vor- oder Nachkommastellen, muss ich sowieso zuerst meine Computeralgebra auf “größeren” Datentypen ausführen. Der in den verschiedenen Windows-Versionen verfügbare “Rechner” z.B. stellt in der wissenschaftlichen Ansicht 30+ Stellen Genauigkeit zur Verfügung. Für solche Anwendungen gibt es entsprechende Pakete.

  30. #30 DeLuRo
    7. März 2013

    @gnaddrig #21 + #22: zu den Millionen / Billionen bekannten Nachkommastellen und “Korrekturlesen”

    Das lässt sich mit Sicherheit automatisiert und maschinell durchführen. Solche Zahlen erhält man heute durch ein als Programm implementiertes Verfahren, und dann stehen die Ziffern als Datei zur Verfügung. Man vergleicht dann entweder mit einer anderen Datei die als korrekt gilt, oder aber man erzeugt eine neue Zifferndarstellung mit einem anderen Algorithmus, der als sicher gelten kann, wie etwa das etwas neuere BBP-Verfahren, und vergleicht dann. Sind dann alle Ziffern (und damit sehr viele Nachkommastellen) identisch, kann man davon ausgehen, dass beide Verfahren mit sehr hoher Wahrscheinlichkeit korrekte Folgen geliefert haben.

    @Merit-Seto, @Rob #23 und @Stephan #28:
    Das Auswendiglernen so vieler Stellen halte ich für verschwendete Zeit, die zumindest ich besser nutzen kann (abgesehen davon, dass ich es wohl nicht könnte). Oder wollen diese Leute durch ihre Fokussierung auf’s Lernen dokumentieren, dass sie nichts anderes können?

  31. #31 Stefan W.
    http://demystifikation.wordpress.com
    8. März 2013

    @DeLuRo

    Mal was Pragmatisches im Falle von Programmierung: ich frage die Bibliothek der anvisierten Sprache einfach mal nach einer Konstanten wie Math.PI oder ähnlich und bekomme dann die Genauigkeit die das System verarbeiten kann.

    Also die Genauigkeit einer Bibliotheksroutine ist die Genauigkeit dieser Routine – nicht die der Sprache, schon gar nicht die des Systems. Auf den meisten Systemen kannst Du Linux installieren, und dann kannst Du einfach bc aufrufen, und bist nur durch die Zeit und den Speicher in der Genauigkeit limitiert. Bzw. als GNU-Software ist bc ja quelloffen und lässt sich auch unter Windows bauen.

    echo "scale=1000;4*a(1)" | bc -l 3.141592653589793238462643383279502884197169399375105820974944592307\ 81640628620899862803482534211706798214808651328230664709384460955058\ 22317253594081284811174502841027019385211055596446229489549303819644\ 28810975665933446128475648233786783165271201909145648566923460348610\ 45432664821339360726024914127372458700660631558817488152092096282925\ 40917153643678925903600113305305488204665213841469519415116094330572\ 70365759591953092186117381932611793105118548074462379962749567351885\ 75272489122793818301194912983367336244065664308602139494639522473719\ 07021798609437027705392171762931767523846748184676694051320005681271\ 45263560827785771342757789609173637178721468440901224953430146549585\ 37105079227968925892354201995611212902196086403441815981362977477130\ 99605187072113499999983729780499510597317328160963185950244594553469\ 08302642522308253344685035261931188171010003137838752886587533208381\ 42061717766914730359825349042875546873115956286388235378759375195778\ 18577805321712268066130019278766111959092164201988

    Scale=1000 sorgt für 1000 Stellen, Laufzeit Null-komma-nix auf einem nicht sehr jungen System. Außerdem kann man mit den meisten Programmiersprachen selbst einen Algorithmus implementieren, der nicht mit Datentypen arbeitet, deren Präzision limitiert ist. Man müsste es dann eben selbst programmieren, aber jede Turing-vollständige Sprache, und die meisten Sprachen sind turing-vollständig, kann Pi beliebig präzise berechnen – die Geschwindigkeit wird allerdings einen Unterschied machen.

  32. #32 JaJoHa
    8. März 2013

    @Stefan W.
    Kurze Frage: “Algorithmus implementieren, der nicht mit Datentypen arbeitet”
    Kannst du mir bitte ganz grob erklären, wie das in C++ aussehen würde, insbesondere wie du das mit dem Dateityp meinst? Ich hatte mal beim rumbasteln so ein ähnliches Problem, das mir beim Wurzeln ziehen die Präzision durch den Variablentyp beschränkt wurde. Würdest du das Ergebnis einfach in einen String schreiben oder wie?

  33. #33 DeLuRo
    8. März 2013

    @JaJoHa, wenn ich dir mal antworten darf, da Stefan W. bisher keine Zeit zu haben scheint…

    Ich hoffe, du meinst das “nicht mit Datentypen arbeiten” nicht ironisch, da natürlich immer eine Interpretation im Sinne eines Datentyps vorhanden ist, und wenn es Bits oder Bytes sind oder sonst eine ganzzahlige Interpretation einzelner Stellen, oder etwas das aus mehreren Stellen zusammengesetzt ist. Wenigstens zum Zwischenspeichern während der Rechnung sind so viele Bits notwendig, wie die Zahl an Informationsgehalt hat, oder eben ein Aggregat mit entsprechender Bitzahl.

    Jede Zahl ist b-adisch als eine Art Polynom zur Basis b (etwa 2, 10, 16, …) darstellbar, und darauf beruht auch die Arithmetik. Schön beschrieben sind die Grundlagen und einige spezielle Ideen in den Wikipedia-Artikeln zu Stellenwertsystemen, Fließkommazahlen und Langzahlarithmetik (keine Ahnung, was ich hiervon voraussetzen kann). Dort steht viel von dem, was man zum Verständnis der Zahlendarstellung im Rechner und für eigene Versuche benötigt, und es sind da einige Hinweise zur Verfügbarkeit “langer” Zahlen in einigen Programmiersprachen.

    Grundsätzlich sollte man sich zunächst einen Datentyp aufgrund einer b-adischen Polynomdarstellung schaffen und dann auf diesem Typ alle benötigten Operationen der neuen Arithmetik herstellen, indem man sie “stückweise” auf die vorhandene Arithmetik herunterbricht bzw. abbildet. Für ein kurzes abstraktes Zahlenpolynom mit der Basis x und Koeffizient a,b,c,d mit a < x usw. wäre eine Multiplikation z.B.
    (ax + b) * (cx + d) = ac x^2 + (ad + bc) x^1 + bd x^0 ,
    wobei die berechneten Koeffizienten dann sämtlich wieder auf "a < x" normalisiert werden müssen, indem Stellenüberträge vorgenommen werden und evtl. auch auf eine Stelle ( e x^3 ) erweitert wird.

    Bei komplexeren (umfangreicheren) Operationen wie Kreisfunktionen oder dem Quadratwurzelziehen wird es natürlich schwierig, wenn sich keine praktikablen Rechenregeln für Polynome finden lassen. In dem Fall ist es oft besser, auf ein "polynomkompatibles" Verfahren auszuweichen, wie z.B. dem Heron-Algorithmus für Wurzeln. — Für C++ speziell kann ich keine Empfehlung geben, aber es wird wohl in den umfangreichen GNU-Projekten auch eine Bibliothek mit Routinen dafür zu finden sein. Einschreiben in einen String bringt vielleicht für die Konvertierung in die Druckdarstellung etwas, und sonst aber nur, wenn du für Rechenoperationen speziell dafür eingerichtete Funktionen zur Verfügung hast.

  34. #34 DeLuRo
    8. März 2013

    @Stefan W. #31:

    Deine Einlassung trifft ja nun nicht gerade das, was ich eigentlich geschrieben habe. Ich schrub über IEEE-Zahlen mit einer 52-Bit-Mantisse, und die haben eben einen Informationsgehalt von 52 dualen Stellen oder 52 * ln(2) / ln(10) = 15,65… dezimalen Stellen. Wenn ich also eine Konstante wie Pi darin speichere, dann habe ich eben höchstens 16 signifikante Stellen bzw. maximal 14..15 Nachkommastellen bei Pi gespeichert; und das erhalte ich auch, wenn ich diese Konstante aus einer entsprechenden Bibliothek auslese. Setze ich voraus, dass die verwendete Arithmetik auch in genau dieser “doppelten Genauigkeit” rechnet, dann erhalte ich bei acos(-1) usw. ebenfalls so viele Stellen (wobei bei der Print-Konvertierung möglicherweise weniger Stellen ausgegeben werden).

    Werte ich diese Genauigkeit als das Maximale, was mir eine Programmiersprache anbietet, dann ist das in meinen Augen eben die Genauigkeit dieser Sprache, oder eben auch der Bibliothek (also Software), in der die Routinen verborgen sind. Der Eingeweihte weiß natürlich, dass dies auch oft mit den Fähigkeiten der Zielprozessoren (also der Hardware) gekoppelt ist, wenn auch nicht unbedingt 1 zu 1. Okay, mit dem Wort “System” war ich sehr unspezifisch; ich meinte eher das spezielle betrachtete Programmiersprachensystem einschließlich seiner Libraries, weniger einen Gesamtrechner aus Hardware und Betriebssystem. Aufgrund benötigter Rechenzeiten ist es schon sinnvoll, einerseits zu überlegen, welche Genauigkeit ich brauche und ob mir eine Sprache dies als Standardarithmetik mit einer Implementierung auf Prozessorebene zur Verfügung stellt.

    Dies ist natürlich ungeachtet der Tatsache, dass viele Sprachen auch Bibliotheken mit höheren oder sogar potenziell beliebig hohen Genauigkeiten anbieten. Der von mir in der Antwort an JaJoHa verlinkte Wikipedia-Artikel über Langzahlarithmetik enthält da einige Hinweise zu bestimmten Sprachen. Dein Beispiel mit dem “bc” (Basic Calculator) ist da sicherlich besonders speziell, denn das Ding ist ja gerade so gebaut, dass er seine Arithmetik nur aus Ganzzahlen zusammensetzt. Das bedeutet aber auch, dass der Fließpunktprozessor nicht genutzt und die Sache langsamer wird (ungeachtet der heute recht schnellen Rechner), und die Anwendung für hochgradig rechenintensive Aufgaben, wie Simulationen mit FEM-Analysen, inakzeptabel wird.

    Abgesehen davon ist dein Beispiel natürlich recht kryptisch, für den nicht-programmierenden Leser wenig verständlich und auch nicht so beeindruckend, da wir 1000 Stellen von Pi kaum mit dem Auge kontrollieren wollen. Die Funktion a() ist mir etwas suspekt an der Stelle, vermutlich mal als Arcustangens definiert, sonst stimmt es nicht. 😉

  35. #35 Stefan W.
    http://demystifikation.wordpress.com
    9. März 2013

    @JaJoHa & DeLuRo:

    Ich bin kein Experte für Arithmetik, aber vor Jahren habe ich in der CT mal einen Artikel gelesen über Pi-Berechnungen. Und mindestens einer, wenn nicht alle diese Algorithmen, die Jahrelang Stelle um Stelle berechnen arbeiten ähnlich, wenn ich das richtig verstanden habe, wie man als Mensch mit Papier und Bleistift an einer Division arbeitet: Man teilt was man hat, berechnet damit eine Stelle, hat einen Rest, und berechnet damit die nächste Stelle.

    Nehmt etwa 7345/394. Nach 10 Stellen könnte man das bisherige Ergebnis abdecken, und die bisherigen Schritte, und würde nur den Rest stehen lassen, und wodurch dividiert werden muss, und eine andere Person könnte ohne Kenntnis des bisherigen Ergebnisses und der ursprünglichen Zahl weiterrechnen.

    Auf die Weise behält man überhaupt kein Ergebnis im Speicher, und spart dadurch jenen ein, und gibt immer nur aus, aus, aus.

    Für’s Weiterrechnen ist das natürlich nicht hilfreich, wenn man das Ergebnis gar nicht speichert, bzw. auf Papier ausdruckt und so einen Medienbruch einfügt, der schlecht umkehrbar ist. Zumindest das Ergebnis auf Festplatte zu speichern, wenn man es als Zeichenkette speichert, ist kein Problem heute, aber alles im Arbeitsspeicher zu behalten war früher jedenfalls auch irgendwann ein Problem – zumindest ein Kostenproblem.

    Was die Performance betrifft, so mag ja eine Rechnung mit doubles irre viel schneller sein – nur ist sie leider auch irre schnell vorbei.

    Wieviele Dezimalstellen können 64 binäre Stellen abbilden? So ca. 48? Da ist der schnarchlangsame bc mit 1000 Stellen in weniger als einer Sekunde schon flott enteilt, der aber gar nicht für Pi-Berechnungen gemacht ist.

    Ich kann aber leider keinen Pi-Algorithmus vorstellen. Ist nicht mein Metier.

    da wir 1000 Stellen von Pi kaum mit dem Auge kontrollieren wollen

    Ich dachte Du wolltest das mit einem anderen Alogorithmus kontrollieren, der in Deinem System drin ist :) (verborgen womöglich).

    Ich hatte mal beim rumbasteln so ein ähnliches Problem, das mir beim Wurzeln ziehen die Präzision durch den Variablentyp beschränkt wurde. Würdest du das Ergebnis einfach in einen String schreiben oder wie?

    Das ist ja ganz die Frage, welches Problem man wofür lösen muss. Ist es eine solitär in der Landschaft stehende Aufgabe, die man löst und fertig, oder muss später weitergearbeitet werden mit dem Ergebnis, und in welchem Kontext, in welche Richtung?

    Ohne dass man eine Spezialbibliothek besorgen muss hat Java schon einen Datentyp ‘BigDecimal’, bei dem man die Genauigkeit beliebig wählen kann – nur durch den Arbeitsspeicher ist man begrenzt, aber nicht durch die Rechnerarchitektur (32/64bit).

    Werte ich diese Genauigkeit als das Maximale, was mir eine Programmiersprache anbietet, dann ist das in meinen Augen eben die Genauigkeit dieser Sprache, oder eben auch der Bibliothek (also Software), in der die Routinen verborgen sind.

    In Bibliotheken sind die Routinen nicht verborgen, sondern ausgestellt. Der einzige Zweck von Bibliotheken ist ja, dass man die Routinen findet – nicht, sie zu verbergen.

    Und Java ist jetzt sicherlich nicht das erste, was einem einfällt, wenn es um Arithmetik geht, so dass ich, auch wenn ich nicht so viel mehr kenne, vermute, dass es heute in fast allen gängigen Sprachen schon fertige Routinen für beliebig genaue Berechnungen gibt.

  36. #36 JaJoHa
    9. März 2013

    @DeLuRo & Stefan W.
    Das war eine ernstgemeinte Frage. Ich hätte ja tendenziell versucht, die Zahlen dann als Aneinanderreihung von Integer in einem Array oder Vector zu bauen. Quasie also eine Klasse zu bauen, die das Verwalten der Zahl übernimmt und das ganze nicht auf eine binäre Zahl runterzubrechen.
    Aber wenn der Algorithmus ja nur Ausgabe machten soll und ich mit der Zahl garnicht weiterrechnen will und nur die letzte Stelle braucht, dann ist die Idee das einfach in eine Datei zu senden natürlich super.
    Mir ist grade klargeworden, das mein Problem eher die Folge meiner Vorgehensweise war und mit einer anderen Herangehensweise, so wie Stefan W. das sagte mit nur Ausgeben, sofort gelöst ist.
    Vielen Dank an euch