Taschenrechner für (extrem) große Zahlen?

... komplette Frage anzeigen

7 Antworten

Bei solch große Zahlen spricht man nicht mehr von Taschenrechner (da keiner über 100 Mio. Ziffern per Hand eingibt) sondern von Programmen. Neben dem sehr teuren Mathematica gibt es auch kostenlose Lösungen im Netz: siehe Antwort von Orsovai

Was viele nicht beachten: die Laufzeit wächst bei Rechnungen oberhalb 100 Mio. und komplizierter als Addition exponentiell an.

Da Du Basic kennst, schau Dir mal 

http://purebasic.fr/german/viewtopic.php?f=16&t=28723

an. Das ist ein echter 64 Bit Compiler -> aber noch nicht schnell genug!

Unter http://www.gerdlamprecht.de/BisZuWelcherNKalleStringKombi.htm

habe ich mal "3 hoch x" mit verschiedenen Programmen untersucht (Tabelle unten).

Neben dem fertigen 

https://www.gnu.org/software/bc/

oder

bigAl 2.4 (in JAVA)

kann man natürlich auch direkt mit JAVA's bigInt rechnen lassen.

Richtig schnell wird's erst, wenn man per c++ alles aus der CPU herausholt:

- 256 Bit AVX-Befehle

- FFT Multiplikation

- Multitasking

- Karazuba Multiplikation

- 16 GB RAM + Datei-Splittung

Hinweis: bereits bei der Multiplikation zweier Zahlen ist es ein gewaltiger Unterschied, ob nur 1 Zahl über 100 Mio. Ziffern hat, oder beide!!!

Antwort bewerten Vielen Dank für Deine Bewertung

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 ;-)

Antwort bewerten Vielen Dank für Deine Bewertung

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.

Antwort bewerten Vielen Dank für Deine Bewertung

Ich kann Dir leider gar nicht helfen :-(

Aber mich würde sehr interessieren, in welcher naturwssenschaftliche Disziplin Du mit diesen "ziemlich großen Zahlen.... mit im Durchschnitt über 175 Millionen Ziffern." konfrontiert bist?

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von MorsGER
30.07.2016, 18:43

Danke trotzdem für das Teilhaben an der "Diskussion".

Hier handelt es sich um einen Teilbereich der Kryptographie. :)

1

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)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von PerfectMuffin
30.07.2016, 17:58

175 Millionen Ziffern

0
Kommentar von MorsGER
30.07.2016, 17:59

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).

0

Mit Byte-Arrays lassen sich beliebig große Zahlen darstellen.

Man kann mittels double dabble-Algorithmus Binär und Dezimal ineinander umrechnen.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von MorsGER
30.07.2016, 18:05

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.

0

Was möchtest Du wissen?