15 Stimmen

Wie gehen Programmiersprachen mit der Arithmetik großer Zahlen um?

Bei einem Computer mit einem 64-Bit-Prozessor wäre die größte Zahl, die er verarbeiten kann, 2 64 \= 18,446,744,073,709,551,616. Wie gehen Programmiersprachen, z. B. Java oder C, C++, mit der Arithmetik von Zahlen um, die höher als dieser Wert sind? Jedes Register kann diese Zahlen nicht in einem einzigen Stück speichern. Wie wurde dieses Problem angegangen?

0voto

Greg D Punkte 41958

Im Allgemeinen beherrscht die Sprache selbst keine hochpräzise, hochgenaue Arithmetik für große Zahlen. Es ist viel wahrscheinlicher, dass ein Bibliothek geschrieben, die alternative numerische Methoden verwendet, um die gewünschten Operationen durchzuführen.

Zum Beispiel (ich denke mir das gerade aus) könnte eine solche Bibliothek die Techniken nachbilden, die Sie verwenden würden, um große Zahlen von Hand zu berechnen. Solche Bibliotheken sind im Allgemeinen viel langsamer als mit der eingebauten Arithmetik, aber gelegentlich ist die zusätzliche Präzision und Genauigkeit erforderlich.

0voto

Toad Punkte 15025

Stellen Sie sich als Gedankenexperiment vor, dass die Zahlen als Zeichenkette gespeichert sind. Mit Funktionen zum Addieren, Multiplizieren, etc. dieser beliebig langen Zahlen.

In Wirklichkeit werden diese Zahlen wahrscheinlich auf eine platzsparendere Weise gespeichert.

0voto

starblue Punkte 53167

Stellen Sie sich eine maschinengroße Zahl als eine Ziffer vor und wenden Sie den Algorithmus für die mehrstellige Multiplikation aus der Grundschule an. Dann brauchen Sie nicht die ganzen Zahlen in Registern zu führen, sondern nur die Ziffern, mit denen Sie arbeiten.

0voto

codymanix Punkte 26958

Die meisten Sprachen speichern sie als Array von Ganzzahlen. Wenn Sie zwei dieser großen Zahlen addieren/subtrahieren, addiert/subtrahiert die Bibliothek alle Integer-Elemente im Array separat und behandelt die Überträge/Brüche. Das ist wie manuelle Addition/Subtraktion in der Schule, denn so funktioniert es intern.

Einige Sprachen verwenden echte Textstrings anstelle von Integer-Arrays, was zwar weniger effizient ist, aber einfacher in eine Textdarstellung umgewandelt werden kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X