Taschenrechner für (extrem) große Zahlen?
Hallo Community,
ich habe derzeit mit einem Problem zu kämpfen, dass ich mit eigenen Mitteln nicht lösen kann. Ich arbeite in einem eigenen Programm mit ziemlich großen Zahlen. Diese haben im Durchschnitt über 175 Millionen Ziffern. (Also nicht nur z.b. 9 wie bei der Zahl: 893247584)
Ich habe bereits mit Basic-Programmiersprachen probiert ein Programm zu schreiben, welches mit diesen Zahlen umgehen kann (multiplizieren, dividieren, usw.), bin dabei aber bisher gescheitert.
Kennt jemand von euch ein Taschenrechner-Programm, welches mit solchen großen Zahlen umgehen (rechnen!) kann? Oder hat vielleicht jemand von euch eins selbst geschrieben?
Hinweis am Rande: Online Taschenrechner o.ä. helfen da nicht viel, da sie nicht im Stande sind die Zahl anzuzeigen, welche zudem durchaus 200MB groß ist.
Hinweis 2: Das Programm muss auch nicht unbedingt per Nummerneingabe funktionieren. Mir liegen die Zahlen als TXT-Dateien vor.
Ich bedanke mich für jede Hilfe.
6 Antworten
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Es gibt spezielle Progammiersprachen oder Bibliothekten für Langzahlarithmetik.
Hier findest Du einige: https://de.m.wikipedia.org/wiki/Langzahlarithmetik
![](https://images.gutefrage.net/media/user/androhecker/1488189404076_nmmslarge__0_0_160_160_7f828fad18ee7edb96b8daceedaeeadb.png?v=1488189406000)
Mit welchen Zahlen arbeitest du denn? Normalerweise sind nur die ersten Stellen wichtig, den Rest macht man mit Potenzen.
(So arbeiten auch die Zahlentypen double und float, nur nicht in solchen Ausmaßen)
Falls du exakte Zahlen willst musst du selbst mit byte Arrays rechnen, oder Funktionen wie BigDecimal/BigInteger in Java nutzen.
Ich kann mir aber nicht vorstellen, für was man eine Genauigkeit von so vielen Stellen benötigt.
![](https://images.gutefrage.net/media/default/user/7_nmmslarge.png?v=1438863662000)
Benutze statt 32bit integer werten 64bit integerwwerte. je machdem ob sie positiv oder negativ sind noch unbedingt unsigned oder signed (erhöht die max mögliche zahl).
In 64bit integer variablen können zahlen gespeichert werden von 2^(64)
![](https://images.gutefrage.net/media/user/MorsGER/1444746382_nmmslarge.jpg?v=1444746382000)
Das Speichern als Integer ist nicht das Problem. Die Zahl kann ich in meinem Programm (im Arbeitsspeicher) haben. Nur die Rechenoperationen werden nicht ausgeführt (sondern nur bis 15-Stellige Zahlen).
![](https://images.gutefrage.net/media/user/PerfectMuffin/1444748168_nmmslarge.jpg?v=1444748168000)
![](https://images.gutefrage.net/media/default/user/7_nmmslarge.png?v=1438863662000)
Achja.. ziffern.. da war was.. :D sorry falsch gelesen
![](https://images.gutefrage.net/media/user/Schachpapa/1456653634658_nmmslarge__116_32_432_432_d36a6a6d62721271685e85017f4dbcb0.jpg?v=1456653637000)
Brauchst du die Zahlen in voller Genauigkeit, z.B. für Teilbarkeitsbetrachtungen oder andere Aufgaben aus der Zahlentheorie?
Ansonsten reicht doch eigentlich für die allermeisten Aufgaben, dass man die ersten 5-15 Stellen weiß und die Größenordnung als 10er Potenz, z.B.
69! = 1,71122e+98
Wenn volle Genauigkeit:
Python hat eine recht einfache Syntax und rechnet mit Ganzzahlen von (im Prinzip) beliebiger Länge. Das Quadrieren einer Zahl mit 1-Mio-Stellen geht ratzfatz, das Zählen der Stellen dauert allerdings einen Moment, weil dafür vom 2er ins Dezimalsystem umgerechnet werden muss.
Wenn du Basic kannst, kannst du auch schnell Python. Probier's aus, du willst hinterher nichts anderes mehr ;-)
![](https://images.gutefrage.net/media/user/PerfectMuffin/1444748168_nmmslarge.jpg?v=1444748168000)
Mit Byte-Arrays lassen sich beliebig große Zahlen darstellen.
Man kann mittels double dabble-Algorithmus Binär und Dezimal ineinander umrechnen.
![](https://images.gutefrage.net/media/user/MorsGER/1444746382_nmmslarge.jpg?v=1444746382000)
Erstmal danke. Aber das Darstellen ist nicht das Problem. Das Rechnen mit diesen Zahlen ist es.
Das Programm führt komplexe Rechenoperationen (z.B. Multiplikation) von Zahlen mit mehr als 15 Stellen einfach nicht mehr aus.
![](https://images.gutefrage.net/media/user/PerfectMuffin/1444748168_nmmslarge.jpg?v=1444748168000)
Multiplikation ist einfach, mach dir ein Programm, das 8bit-Zahlen multipliziert(ohne MAL-Zeichen) und skaliere es dann hoch.
Aber viel Spaß mit Division.
Viele Frameworks haben Datenstrukturen wie Javas BigInteger, in denen sowas implementiert sein kann.