Wie kann ich die Ausgabe von 250500 * 250500 in 32-Bit-Worten darstellen?


-3

Wir haben 250500 * 250500 = 62.570.250.000. Wie können wir dies mit niedrig und hoch darstellen? Ich weiß, dass die größte Zahl, die in 32 Bit dargestellt werden kann, 4.294.967.295 ist (2 ^ 32 - 1).


1
-1 diese Frage "Wie können wir diese [Zahl] mit niedrig und hoch darstellen" ist Kauderwelsch. Übrigens ist die Zahl, die Sie angeben, die größte Zahl, wenn Sie keine negativen Zahlen speichern.
Barlop

Vielleicht meinst du mit niedrig und hoch binär, wobei niedrig 0 und hoch 1 ist.
Barlop

2
Auch die Zahl, die Sie speichern möchten, beträgt 62 Milliarden, wobei Sie selbst gesagt haben, dass Sie höchstens 4 Milliarden in 32 Bit speichern können. Alles, woran ich denken kann, sind vielleicht Exponent und Mantisse - binäre wissenschaftliche Notation.
Barlop

1
Wenn Sie den Windows-Rechner überprüfen, sehen Sie, dass die Binärzahl für diese 62-Milliarden-Zahl 11101001 11000011 01001101 01000001 0000 32 Bits + 4 Bits am Ende ist, die Nullen sind. Wenn Sie also die ersten 32 Bits an der einen Stelle und an der anderen Stelle speichern, werden Sie Speichern Sie etwas, das sagt, multiplizieren Sie dies mit 2 ^ 4 und dann mit diesem Ergebnis. Vielleicht wäre das ein Exponent von 4. Aber Sie würden immer noch einige Bits für den Exponenten benötigen. Mindestens 3 Bits. Das ist, wenn Sie einen Exponenten verwenden. Ich kann nicht sehen, wie Sie diese Zahl in nur 32 Bit speichern können. Vielleicht 35 oder 36 Bit. Vielleicht in zwei 32-Bit-Wörtern, wenn Sie das dürfen
Barlop

2
Warum beschränken Sie sich künstlich auf nur 32-Bit?
Ramhound

Antworten:


1

In binärer Form sieht 250500 * 250500 = 62.570.250.000 folgendermaßen aus:
0011 1101 0010 1000 0100 * 0011 1101 0010 1000 0100 =
0110 1001 1100 0011 0100 1101 0100 0001 0000

Solide mathematische Regeln besagen, dass Sie die Ergebnisse einer 18-Bit-Zahl mal einer 18-Bit-Zahl in 36 Bits einpassen können. Solide mathematische Regeln besagen, dass Sie die Komprimierungsbits nicht unbedingt reduzieren können. Daher müssen Sie möglicherweise einige Einschränkungen beachten.

Trotzdem kann es einige Optionen geben.

Ein Computer könnte verwendet werden, um Meter oder Kilometer zu verfolgen.
Wenn Sie das Konzept von 50 Kilometern im Auge behalten, ist das praktisch das Gleiche wie 50.000 Meter im Auge zu behalten.
Anstatt 250500 * 250500 = 62.570.250.000 (dh 250.500 einzelne Einheiten x 250.500 einzelne Einheiten) zu protokollieren, können Sie auch Deka-Einheiten protokollieren, z -Einheiten). Die Nummer 627.502.500 passt in ein 32-Bit-Wort.

Ein erfahrener Computerprogrammierer sollte überlegen, was der Arbeitsspeicher des Computers darstellt (z. B. wenn in einem Teil des Arbeitsspeichers Informationen zu Einheiten oder Deka-Einheiten gespeichert sind), und Anpassungen vornehmen, wenn es Vorteile gibt (z. B. Einschränkungen umgehen oder nur mit diesen arbeiten) schnellere Geschwindigkeit).

Anstatt den Überblick über Deka-Einheiten zu behalten (das sind Gruppen von 10 Einheiten), möchten Sie möglicherweise den Überblick über Gruppen von Einheiten behalten, die eine andere Größe haben, z. B. Gruppen von 500 Einheiten. Das Konzept ist, dass Sie, wenn Sie wissen, dass Ihre Zahlen immer gerade sind, Zahlen durch zwei und Potenzial mit kleineren Einheiten teilen können. (Sie müssten jedoch durch mehr als 2 dividieren, um unter den spezifischen Maximalwert von 4.294.967.295 zu gelangen.) Wenn Sie Hektoeinheiten (jeweils 100 Einheiten) verfolgen können, erhalten Sie anstelle von 250.500 * 250.500 2.505 * 2.505 = 6,275,025 (12 Bit mal 12 Bit, was 24 Bit zum Speichern eines Ergebnisses erfordern könnte, aber in diesem speziellen Fall nur 23 Bit erfordert). Wenn Sie die Quinque- Hekto-Einheiten (500) verfolgen können , erhalten Sie 501 * 501 = 251.001 (9 Bit mal 9 Bit, in 18 Bit gespeichert).

Ob Sie ein nützliches Muster finden, ist ein Aspekt der nützlichen Programmierung, der über die bloße Vertrautheit mit einer Programmiersprache hinausgeht. Dies hängt häufig davon ab, welches Konzept Sie in der Praxis verfolgen möchten. Die Machbarkeit (und Details der Implementierung) kann in verschiedenen Szenarien variieren.

Edit: Kleinere Korrektur. Außerdem wurde der Absatz um 500 Einheiten erweitert, um die tatsächlichen Zahlen als Demonstration anzuzeigen.


0

Die Frage lautet derzeit: "Wir haben 250500 * 250500 = 62.570.250.000."

Nun, das ist kompletter und völliger Unsinn.
250500 * 250500 = 62.570.250.000. (FALSCHE MATHE in der Frage angegeben)
250500 * 250500 = 62.750.250.000. (RIGHT MATH, was bedeutete die Frage wahrscheinlich zu stellen)

Dies warf einige meiner Berechnungen ab. Wenn wir einen Tippfehler annehmen und diesen korrigieren, kann ich diese Antwort für 62.750.250.000 liefern.

Die einfache und unkomplizierte Antwort auf die Frage lautet: Speichern einer kleineren Zahl zusammen mit einer Potenz. Das ist die Antwort, in wenigen Worten zusammengefasst. Diese Antwort erfordert wahrscheinlich eine Erklärung, weshalb ich den Rest dieses Textes zur Verfügung stelle.

25.500 sind 18 Bits.
2 ist ein Bit.
Das erfordert insgesamt 19 Bits. Das sind 32 Bits. Das funktioniert.

Tatsächlich ähnelt diese Art des Denkens der Art und Weise, wie eine x86-CPU (80387 und höher) Gleitkommazahlen verfolgt, wobei einige Bits als Signifikant verwendet werden .

In der Frage wurde nicht angegeben, dass 62.570.250.000 als direkte Nummer gespeichert werden müssen. Das erste, was Sie tun können, ist, eine Quadratwurzel daraus zu ziehen und zu sehen, ob das Ergebnis eine Ganzzahl ist. Das Ergebnis ist eine Ganzzahl, und es steht eine perfekt gültige Lösung zur Verfügung. Diese Lösung ermöglicht die erfolgreiche Speicherung einiger Zahlen mit einer Größe von 549.755.748.352 (das entspricht 8.388.607 * 65.536, auch bekannt als 8.388.607 * (zwei zur 16. Potenz erhoben)). Eine der Zahlen, die dieses System genau darstellen kann, ist
62.750.250.500
, obwohl dasselbe System
62.750.250.499 nicht speichern kann

Das ist jedoch in Ordnung, da für die Frage nicht alle möglichen kleineren Nummern gespeichert werden mussten. Die Frage wollte lediglich einen Weg finden, die Zahl 62.750.250.500 darzustellen. Das ist durchaus machbar.

Die Bits, die Sie speichern, sind also:
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0

Unter Verwendung einer Technik ähnlich der üblichen IEEE-Gleitkomma-Assembly könnten diese Bits folgendermaßen interpretiert werden:

  • eine positive Zahl (erstes Bit)
  • 25500 (Bits 10 bis 32)
  • das wird einmal von selbst multipliziert
    • Weil ... "1" der Wert der Bits 2 bis 9 ist.

Beachten Sie, dass die Bits 2 bis 8 und 10 bis 14 führende Nullen sind. Das sind 7 + 5 = 12 Bits, die in diesem Fall nicht sehr effektiv sind. Wenn positive Zahlen angenommen werden, sind dies 13 Bits, die für diesen speziellen Fall möglicherweise ineffektiv / ineffizient sind, sodass die Möglichkeit besteht, dass diese unterschiedlich verwendet werden. (Denken Sie daran, ich sagte früher, wir brauchten 19 der 32 Bits. 13 + 19 = 32.)

Die Idee dabei ist, dass "Ausgabe" nicht als große Zahl gespeichert werden muss, wenn Sie wissen, dass diese Zahl leicht als Zweierpotenz dargestellt werden kann. Der Wert von 62.750.250.000 wird effektiv gespeichert, und die Art und Weise, wie er dargestellt wird, besteht darin, eine kleinere Zahl zusammen mit einer Potenz zu speichern . Im Wesentlichen speichern wir Daten, die es uns in Kombination mit einer bekannten Formel, die wir angegeben haben, ermöglichen, diese bestimmte Nummer zu speichern. (Diese Formel kann möglicherweise nützlich sein, um andere Zahlen zu speichern, wenn häufig quadratische Zahlen verwendet werden.)

Hinweis: Dieses System ist etwas ähnlich, aber NICHT dasselbe wie das Gleitkommasystem von IEEE, das ich in einer auf x86-Assembly fokussierten Universitätsversammlungsklasse besprochen habe. Hier ist ein Hyperlink zu einem Online-Konverter für IEEE-Gleitkommazahlendie Sie für dieses System verwenden könnten. In diesem System geben die Bits für den Exponenten an, welche Zweierpotenz zum Multiplizieren der verbleibenden Bits verwendet wird. Dies passt jedoch nicht in diesen Fall, da 25.500 keine Zweierpotenz ist. Beim Versuch, das Gleitkommasystem von IEEE zu verwenden, konnten wir feststellen, dass 62.750.250.000 geteilt durch 16 3.921.890.625 sind. Wir könnten also die Zahl als 3.921.890.625-mal darstellen (zwei hoch vier). Wir würden immer noch 36-Bit benötigen, was größer ist als die angeforderten 32-Bit (und größer als die 24 Bit, die Intels Coprozessoren zum Speichern der Nicht-Exponenten-Version der Zahl verwenden).

Ich hätte den Teil der Frage, bei dem "Niedrig und Hoch" verwendet wird, möglicherweise weitgehend ignorieren können. Ich war mir nicht ganz sicher, was die Frage ist. Dieses System verwendet jedoch unterschiedliche Bits für unterschiedliche Zwecke, so dass der Exponentenabschnitt der Daten als "höhere" Bits betrachtet werden kann als die anderen Bits, die an einer niedrigeren Position platziert sind. Die Frage "Wie können wir dies darstellen?" Wird direkt mit dem fettgedruckten Satz beantwortet und im weiteren Verlauf dieser Antwort näher erläutert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.