lange Kommazahlen



  • Mein Problem ist das ich eine Kommazahl mit am besten 3 Billionen Nachkommastellen brauche kann mir da jemand helfen?




  • Mod

    Hat zwar meines Wissens nach nur ein C Interface, ist aber quasi der de facto Standard für diese Aufgabe:
    http://gmplib.org/

    Allgemein ist das Stichwort dafür "arbitrary precision arithmetic", wenn du selber nach etwas anderem suchen möchtest.

    Darf ich so neugierig sein, zu fragen, wofür?

    edit: Zu langsam...

    edit2: 3 Billionen Stellen ist aber immer noch eine Menge. Hoffe du hast einen Rechner mit reichlich RAM. Eine einzelne Zahl dieser Präzision wird schon gut 1.3 GB Speicher brauchen.



  • ich will den Pi rekord knacken, ne scherz 😉 einfach nur so um Pi auszurechnen leider reicht bei meiner methode nicht mal ein long double für eine Stelle

    wärt ihr denn noch so nett und erklärtt mir wie man das in c++ einbaut,
    ansonsten schonmal danke





  • sry aber mein englisch ist nicht so gut mien problem ist, das ich nicht weiß wie ich das in Visual c++ 2010 eibinde, ich find auch die datei gmp.h nicht mehr brauch ich glaub ich auch nicht.



  • Die höchst möglich darstellbare Zahl wird allein vom Datentyp bestimmt. Was da nicht rein passt geht einfach nicht. Für mehr musst du wohl etwas eigenes schaffen und die Zahl auf zwei oder mehr double oder long double aufteilen. Es gibt da so etwas für Integers mit BigInt oder wie auch immer, was als Grundlage verwendbar sein könnte. Viel Spass bei deinem Vorhaben mit der Zahl pi!

    Mir reicht pi = 3.146592.. oder wie auch immer.
    Willst du in das Guiness-Buch der Rekorde? Dann musst du dich etwas anstrengen - wir hier in diesem Forum haben dieses Ziel eher nicht. 😮



  • Hotspott schrieb:

    Mein Problem ist das ich eine Kommazahl mit am besten 3 Billionen Nachkommastellen brauche kann mir da jemand helfen?

    Für's PI berechnen gibt es bestimmt besondere Algorithmen. Außerdem sind 3 Billionen = 3.000.000.000.000. Für 3 Billionen Dezimalstellen brauchst Du also etwa 1,13 Terabytes Speicher, nur um eine solche Zahl darstellen zu können, und noch viel mehr, wenn Du damit rechnen willst. 😉



  • den algorithmus hab ich ja schon (1/12)+(1/22)+(1/32)...=pi2/6
    mein problem ist halt das er z.b nicht 1.53977 / 0.1666666 rechnen kann und vor allem die langen zahlen nicht kann. Das mit rechenleistung lassen wir mal ausen vor das projekt ist nur zum lernen 😉
    Eure antwort für lange zahlen war GMP nur weiß ich nicht wie ich das eibinde wie der code aussehen muss verstehe ich ja (glaub ich) aber wenn ich eingebe :#include "gmp.h" kommt logischer weise datei nicht gefunden, ich find sie ja noch nichtmal so bei den gedownloadeten daten, und wenn ich sie hätte wüssete ich auch nicht wie ich sie ins projekt eibinde 😞



  • Hotspott schrieb:

    den algorithmus hab ich ja schon (1/12)+(1/22)+(1/32)...=pi2/6
    mein problem ist halt das er z.b nicht 1.53977 / 0.1666666 rechnen kann und vor allem die langen zahlen nicht kann. Das mit rechenleistung lassen wir mal ausen vor das projekt ist nur zum lernen 😉
    Eure antwort für lange zahlen war GMP nur weiß ich nicht wie ich das eibinde wie der code aussehen muss verstehe ich ja (glaub ich) aber wenn ich eingebe :#include "gmp.h" kommt logischer weise datei nicht gefunden, ich find sie ja noch nichtmal so bei den gedownloadeten daten, und wenn ich sie hätte wüssete ich auch nicht wie ich sie ins projekt eibinde 😞

    Also wieso du sie bei den dlten Sachen nicht findet, weiss ich auch nicht, aber du müsstest sie in den Projektordner tuen, in dem sich die .cpp Datei deines Projektes befindet.

    Bisl OTT : Netter Artikel zur Darstellung von Pi : http://de.wikipedia.org/wiki/Vietas_Produktdarstellung_der_Kreiszahl_Pi



  • mhh.. okey mit der Datei schau ich mal ob ich die noch woanders bekommen und miene rechnung funktioniert super habs bis 3,14159 geschaft weiter geht die long double nicht



  • abs bis 3,14159 geschaft weiter geht die long double nicht

    Das halte ich für ein Gerücht



  • so habs geschaft aber wie gib ich den meinen variablen einen wert (int)?

    *edit:
    wiso gerücht ich habs ja 😉 ??
    http://marcel.patzsch.de/Datein/pi.exe
    der beweis 😉



  • Gerücht weil long double sicherlich wesentlich länger als 3,14159 werden kann.



  • compilier mal folgenden Code, dann siehst du, was wir meinen:

    #include <cmath>
    #include <iostream>
    #include <iomanip>
    #include <limits>
    int main()
    {
        long double pi = std::acos(-1.L);
    
        std::cout<<std::setprecision(std::numeric_limits<long double>::digits10)<<pi;
    }
    


  • krümelkacker schrieb:

    Außerdem sind 3 Billionen = 3.000.000.000.000. Für 3 Billionen Dezimalstellen brauchst Du also etwa 1,13 Terabytes Speicher, nur um eine solche Zahl darstellen zu können, und noch viel mehr, wenn Du damit rechnen willst. 😉

    wer rechnet bei sowas denn mit dezimalstellen :p dürften bei 'ner 2^32-Basis unter 4 GB sein.



  • ahh... okey danke 😃 komm jetzt noch ein bisschen weiter.



  • blubbblubb schrieb:

    krümelkacker schrieb:

    Außerdem sind 3 Billionen = 3.000.000.000.000. Für 3 Billionen Dezimalstellen brauchst Du also etwa 1,13 Terabytes Speicher, nur um eine solche Zahl darstellen zu können, und noch viel mehr, wenn Du damit rechnen willst. 😉

    wer rechnet bei sowas denn mit dezimalstellen :p dürften bei 'ner 2^32-Basis unter 4 GB sein.

    3 Billionen Stellen Genauigkeit lassen sich auch in Binärdarstellung nicht in 4GB pressen. 1 Byte reicht für mehr als 2, aber weniger als 3 Dezimalstellen, binär kodiert (Es sei den, du jagst noch irgendwelche Komprimierungsalgorithmen drüber).



  • asc schrieb:

    3 Billionen Stellen Genauigkeit lassen sich auch in Binärdarstellung nicht in 4GB pressen. 1 Byte reicht für mehr als 2, aber weniger als 3 Dezimalstellen ...

    Vielleicht hat er ja 4 GB RAM oder mehr oder er lagert Zwischenwerte auf die Festplatte aus? Machbar ist alles mit dem richtigem Algorithmus und wenn man beherrscht, was System und Compiler verkraften.

    Die Frage bleibt etwas für Mathe-Freaks. Für mich ist das nichts! 😮
    daddedu! :p


  • Mod

    asc schrieb:

    blubbblubb schrieb:

    krümelkacker schrieb:

    Außerdem sind 3 Billionen = 3.000.000.000.000. Für 3 Billionen Dezimalstellen brauchst Du also etwa 1,13 Terabytes Speicher, nur um eine solche Zahl darstellen zu können, und noch viel mehr, wenn Du damit rechnen willst. 😉

    wer rechnet bei sowas denn mit dezimalstellen :p dürften bei 'ner 2^32-Basis unter 4 GB sein.

    3 Billionen Stellen Genauigkeit lassen sich auch in Binärdarstellung nicht in 4GB pressen. 1 Byte reicht für mehr als 2, aber weniger als 3 Dezimalstellen, binär kodiert (Es sei den, du jagst noch irgendwelche Komprimierungsalgorithmen drüber).

    Habe ich oben doch schon vorgerechnet. Jedoch habe ich oben versehentlich mit englischen Billionen gerechnet (habs einfach in Google getippt). Wenn man diesen fehlenden Faktor 1000 berücksichtigt, kommt man auf rund 1.3 TB.

    Rechnung: log(10)/log(2)*3 Billionen gibt Zahl der Bits.


Anmelden zum Antworten