Wie kann der Computer Zahlen über z.B.: 64 bit darstellen wenn er nur 64 Bit hat?

7 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Wenn von einem 64-Bit-Computer geredet wird, ist damit das Bussystem gemeint, das Daten in einer „Breite“ von 64 Bit adressiert und verschicken kann. Durch eine passende Programmierung kann man auch vieeeeeel größere Zahlen berechnen.

Die Zahlen werden in 264, 464 … n*64 Bit eingeteilt und wie wir es ursprünglich gelernt haben berechntet man dann von den niederwertigeren 64-Bitgruppen zu den höherwertigeren 64-Bitgruppen die Werte der Zahlen. Das dauert dann natürlich länger, weil Intel-Prozessoren jede 64-Bitgruppe in die Register laden muß, erst dann die Rechnung vornehmen können und danach das Teilergebnis speichern müssen.

2 wichtige Konzepte:
a) Funktionen: man zerlegt die ganze Aufgabe in Teilaufgaben
b) Übergabewerte für Funktionen: Arrays, also Feld von Zahlen oder Zeichen
Einfaches Beispiel: in der Programmiersprache php gibt es bcmath -> eine Sammlung von den Basis-Funktionen wie Addition "bcadd(str1 , str2, AnzahlNachkommastellen)"
Die Eingabe liegt immer als String vor = Feld von Bytes, wobei jedes Byte Ascii-Code verschlüsselt ist
Als Ergebnis bekommt man ein Text (String) mit der gewünschten Nachkommastellenanzahl.
Alle höheren Funktionen muss man sich selbst mit eigenen Funktionen erstellen.
Unter http://www.lamprechts.de/gerd/php/RechnerMitUmkehrfunktion.php
sind um die 300 Funktionen teilweise auch im komplexen (realteil + im.Teil) ONLINE!
probier man 2 hoch 600 = pow(2,600)
Mit der Modulo Funktion bekommt man sogar die letzten Ziffern von ultraextrem großen Potenzen heraus (das Beispielbild darunter)
Oder Addition und Multiplikation mit 64 stelligen Zahlen...
Fakultät schon probiert?
Wenn was interessantes fehlt, melde Dich bitte.

hypergerd  11.04.2014, 08:45

interessant: viele neue 64Bit-CPUs haben intern bereits Rechenregister bis 256 Bit!
Leider driften Intel & AMD immer weiter auseinander und Microsoft ist mehr an ihrer .NET (wie c#) Interpreter als an c++ Compiler interessiert.
Es gibt aber selbst unter dem kostenlosen PureBasic Compiler die Möglichkeit echte 128Bit Berechnungen zu programmieren! (mit ASM-Befehlen direkten Maschinencode)
Vorteil gegenüber Strings: sehr viel schneller.

0
wolfgang1956  11.04.2014, 09:37
@hypergerd

interessant: viele neue 64Bit-CPUs haben intern bereits Rechenregister bis 256 Bit!

Und welche wären das?

Es gibt aber selbst unter dem kostenlosen PureBasic Compiler die Möglichkeit echte 128Bit Berechnungen zu programmieren! (mit ASM-Befehlen direkten Maschinencode) Vorteil gegenüber Strings: sehr viel schneller.

  1. Man muß wissen, wie der Compiler die Register belegt
  2. Man muß wissen, wie die Zahlen zu adressieren sind
  3. Man muß vor allem wissen, dass Intel-Assembler im Vergleich zu vielen anderen Assemblersprachen eher eine Zumutung den eine elegante Sprache ist.
  4. Adressierbeispiel in Assembler – normale Menschen denken: Ich nehme das Datum von X und lade es nach Y. Wenn der Assemblierer das intern wegen der Einfachheit für den Prozessor dann umkehrt, muß der Mensch seine Gedanken nicht verbiegen. Kein Mensch denkt: Ich speichere das Datum in Y und hole es von X wie es von Intel-Assemblern verlangt wird.
  5. Auch die vielen MMS-, SS2 … n-Befehle braucht in der Praxis niemand. Compiler für C und andere Hochsprachen verwenden diese Befehle praktisch nicht. Wer diese Befehle auf Assemblerebene nutzen will, muß, bevor er diese Befehle einsetzen kann, die Speicherstrukturen vorbereiten, sodaß die Befehle nicht nur ihre eigenen Befehlszeiten sondern noch zig Befehlszeiten mehr benötigen. Da kann man sich den Aufwand sparen …
0
hypergerd  11.04.2014, 10:45
@wolfgang1956

zu "welche CPU":
Jede 64Bit CPU legt ihr Ergebnis (add, mul, div) intern in 2 Register ab (also 128 Bit). Es ist nur umständlich ...
Neben den MMX- und SSE-Befehlen gibt es bei Intel die AVX
siehe engl. Wikipedia Advanced Vector Extensions und AVX-512 (sogar 512 Bit; CPUs dort beschrieben)

Ja, das in ASM und mit MMX ist schwer siehe http://forums.purebasic.com/german/viewtopic.php?f=8&t=24529
Wer nutzt das:
- jede gute Video-Konvertierungssoftware
- die beiden Weltmeister mit 12,1 Bio Pi Nachkommastellen
Aber in der Tat zu wenige. Ist von der Wirtschaft auch nicht gewollt, dass der Anwender seinen Code selber schreibt :-(
Wir sollen nur die "entschleunigten" neuen teuren Softwarepakete kaufen...
und von der Hardware schwärmen die das könnte, wenn ...

0

Schau in der Wikipedia unter "Langzahlarithmetik". Ausführlicher ist der englische Artikel "Arbitrary-precision arithmetic". Dort sind zu den gängigen Programmiersprachen Module aufgelistet, mit denen man Langzahlarithmetik anwenden kann. Von Haus aus können die Computeralgebra-Systeme (CAS) mit beliebig langen Zahlen rechnen. Nur der Arbeitsspeicher und die Geduld des Anwenders setzen der Länge der so zu verarbeitenden Zahlen Grenzen. Zum freien Download sind z.B. Reduce und Maxima erhältlich. Maxima berechnet solche...

(%i11) 41!;
(%o11)        33452526613163807108170062053440751665152000000000

...und noch viel längere Zahlen in einem Wimpernschlag.

Franz1957  11.04.2014, 00:10

Zu der Frage, wie der Computer das macht: Er stellt die langen Zahlen als Ketten von kürzeren Zahlen dar und verarbeitet sie Stück für Stück. Wie martin7812 schon sagte, ähnelt das der unserer schriftlichen Multiplikation. Nur daß es für den Rechner kein Problem ist, bei jedem Schritt gleich Zahlenabschnitte zu multiplizieren, die ein halbes Register lang sind.

0

Soweit ich weis haben die 64 Bit nichts mit der Darstellung und verrechnung von Zahlen zu tun hat, ausserdem wäre 9223372036854775807 * 9223372036854775807 (85070591730234615847396907784232501249) deutlich mehr als 64 Bit.

wenn er nur 64 Bit hat?

Er hat einen 64bit Daten-, Adressbus usw. Mit der Zahlendarstellung hat das eher wenig zu tun.

http://de.wikipedia.org/wiki/64-Bit-Architektur

apfeldeluxe  10.04.2014, 14:11

nicht ganz... er hat auch 64bit weite arbeits schiebe akku und lade sowie ausgabe register. ferner hat nicht jeder 64bit prozessor auch 64bit am datenbus... woür auch? 43bit reichen auch aus um unmengen an daten zu adressieren.^^

aber seine frage lässt sich mit ein paar tricks beantworten. dynamische maskenparametrierung. daten werden geschoben und mittels maske reparametriert. sie bekommen positive wie negative transienten und vorzeichen gesetzt und agieren im bereich von -einhalb mal sich selbst bis + einhalb mal sich selbst multipliziert mit sekundärregister + einhalb mal sich selbst bis - einhalb mal sich selbst und so weiter. ferner können start und stop lables gesetzt werden, um datenstrings zu teilen.

0
apfeldeluxe  10.04.2014, 14:32
@apfeldeluxe

ach und um das noch mal zu konkretisieren... 64bit bedeutet das der rechner allein in einem arbeitsregister ohne hilfsmittel einen festen wert dezimal von 18 trillionen, 446 billiarden, 744 billionen, 73 milliarden, 709 millionen, 551 tausend, 616 halten und generieren kann.

könntest du das in euros haben, dann hättest du soviele eineuro stücke wie es sterne in ca ~60 galaxien wie der milchstraße hast, wenn diese allen schätzungen nach zwischen 250.000.000.000 und 300.000.000.000 sterne beinhaltet.

das ist schon eine eher sehr große zahl... also finde ich dein "nnur zahlen bis 64bit" iwie etwas rofl^^

0