Was ist der Unterschied zwischen einer single-precision and double-precision floating-point operation?

StackOverflow https://stackoverflow.com/questions/801117

Frage

Was ist der Unterschied zwischen einer single-precision floating-point operation-und double-precision floating-Betrieb?

Ich interessiere mich vor allem für in der Praxis in Bezug auf Videospiel-Konsolen.Zum Beispiel stellt der Nintendo 64 eine 64-bit-Prozessor, und wenn es das tut, dann würde das bedeuten, der in der Lage war-double-precision-floating-point-Operationen?Kann die PS3 und Xbox 360 pull off double-precision-floating-point-Operationen oder nur einfache Genauigkeit) und im Allgemeinen Gebrauch ist die double-precision-Fähigkeiten Gebrauch gemacht (wenn vorhanden?).

War es hilfreich?

Lösung

Hinweis: die 64 Nintendo einen 64-Bit-Prozessor verfügt, jedoch:

  

Viele Spiele nutzten den 32-Bit-Verarbeitungsmodus des Chips als die größere Datengenauigkeit verfügbar mit 64-Bit-Datentypen ist nicht in der Regel von 3D-Spielen erforderlich ist, sowie die Tatsache, dass die Verarbeitung 64-Bit-Daten doppelt so viel verwendet RAM, Cache und Bandbreite, wodurch die Gesamtleistung des Systems zu reduzieren.

Webopedia :

  

Der Begriff doppelte Genauigkeit ist etwas irreführend, da die Genauigkeit nicht wirklich doppelt so hoch ist.
  Das Wort Doppel ergibt sich aus der Tatsache, dass eine Zahl mit doppelter Genauigkeit verwendet doppelt so viele Bits wie eine normale Gleitkommazahl.
  Wenn zum Beispiel einer einfache Genauigkeit Nummer 32 Bits erfordert, sein doppeltgenaue Gegenstück 64 Bits lang sein wird.

     

Die zusätzlichen Bits erhöhen nicht nur die Präzision, sondern auch den Bereich der Größen, die dargestellt werden können.
  Der genaue Betrag, um den die Genauigkeit und Reichweite der Größen erhöht werden, hängt davon ab, welche Format wird das Programm mit Floating-Point-Werte darzustellen.
  Die meisten Computer verwenden, um ein Standardformat als das Format Gleitkommazahlen IEEE bekannt.

Aus dem IEEE-Standard für Gleitkomma-Arithmetik

Single Precision

Die IEEE single precision floating point Standarddarstellung erfordert ein 32-Bit-Wort, das als 0 bis 31, von links nach rechts numeriert dargestellt werden kann.

  • Das erste Bit ist das Zeichen Bit, S,
  • die nächsten acht Bits sind der Exponent Bits, 'E' und
  • Die letzten 23 Bits sind die Fraktion 'F':

    S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF
    0 1      8 9                    31
    

Der Wert V durch das Wort dargestellt wird, kann wie folgt bestimmt werden:

  • Wenn E = 255 und F ist ungleich Null, dann V = NaN ( "Not a number")
  • Wenn E = 255 und F gleich Null ist und S 1 ist, dann V = -Infinity
  • Wenn E = 255 und F gleich Null ist und S 0 ist, dann V = Unendlich
  • Wenn 0<E<255 dann V=(-1)**S * 2 ** (E-127) * (1.F) wo "1.F" ist soll die Binärzahl durch Voran F mit einer geschaffen darzustellen implizit führend 1 und einen binären Punkt.
  • Wenn E = 0 und F ist ungleich Null, dann V=(-1)**S * 2 ** (-126) * (0.F). Diese sind "nicht normalisierten" Werte.
  • Wenn E = 0 und F gleich Null ist und S 1 ist, dann V = -0
  • Wenn E = 0 und F ist Null und S 0 ist, dann V = 0

Insbesondere

0 00000000 00000000000000000000000 = 0
1 00000000 00000000000000000000000 = -0

0 11111111 00000000000000000000000 = Infinity
1 11111111 00000000000000000000000 = -Infinity

0 11111111 00000100000000000000000 = NaN
1 11111111 00100010001001010101010 = NaN

0 10000000 00000000000000000000000 = +1 * 2**(128-127) * 1.0 = 2
0 10000001 10100000000000000000000 = +1 * 2**(129-127) * 1.101 = 6.5
1 10000001 10100000000000000000000 = -1 * 2**(129-127) * 1.101 = -6.5

0 00000001 00000000000000000000000 = +1 * 2**(1-127) * 1.0 = 2**(-126)
0 00000000 10000000000000000000000 = +1 * 2**(-126) * 0.1 = 2**(-127) 
0 00000000 00000000000000000000001 = +1 * 2**(-126) * 
                                     0.00000000000000000000001 = 
                                     2**(-149)  (Smallest positive value)

Double Precision

Die IEEE double precision floating point Standarddarstellung erfordert ein 64-Bit-Wort, das als von 0 bis 63, von links nach rechts numeriert dargestellt werden kann.

  • Das erste Bit ist das Zeichen Bit, S,
  • die nächsten elf Bits sind die Exponent Bits, 'E' und
  • Die letzten 52 Bits sind die Fraktion 'F':

    S EEEEEEEEEEE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    0 1        11 12                                                63
    

Der Wert V durch das Wort dargestellt wird, kann wie folgt bestimmt werden:

  • Wenn E = 2.047 und F ist ungleich Null, dann V = NaN ( "Not a number")
  • Wenn E = 2.047 und F gleich Null ist und S 1 ist, dann V = -Infinity
  • Wenn E = 2.047 und F gleich Null ist und S 0 ist, dann V = Unendlich
  • Wenn 0<E<2047 dann V=(-1)**S * 2 ** (E-1023) * (1.F) wo "1.F" ist soll die Binärzahl durch Voran F mit einer geschaffen darzustellen implizit führend 1 und einen binären Punkt.
  • Wenn E = 0 und F nicht Null ist, dann V=(-1)**S * 2 ** (-1022) * (0.F) Diese sind "nicht normalisierten" Werte.
  • Wenn E = 0 und F gleich Null ist und S 1 ist, dann V = -0
  • Wenn E = 0 und F ist Null und S 0 ist, dann V = 0

Referenz:
ANSI / IEEE-Standard 754-1985,
Norm für binäre Gleitkomma-Arithmetik.

Andere Tipps

las ich eine Menge Antworten, aber keiner scheint richtig zu erklären, wo das Wort Doppel herkommt. Ich erinnere mich an eine sehr gute Erklärung von einer Universität Professor, den ich vor einigen Jahren.

, um den Stil der VonC Antwort unter Hinweis auf eine einzigen precision floating point Darstellung verwendet ein Wort von 32 Bit.

  • 1 Bit für die Zeichen , S
  • 8 Bit für den Exponenten , 'E'
  • 24 Bit für die Fraktion , die auch als Mantisse oder Koeffizient (obwohl nur 23 vertreten sind). Nennen wir es 'M' (für Mantisse , ziehe ich diesen Namen als "Fraktion" falsch verstanden werden kann).

Darstellung:

          S  EEEEEEEE   MMMMMMMMMMMMMMMMMMMMMMM
bits:    31 30      23 22                     0

(nur darauf zu hinweisen, das Vorzeichenbit ist das letzte, nicht der erste.)

A Doppel Präzision Gleitkommadarstellung verwendet ein Wort von 64 Bit.

  • 1 Bit für die Zeichen , S
  • 11 Bit für den Exponenten , 'E'
  • 53 Bits für die Fraktion / Mantisse / Koeffizient (obwohl nur 52 dargestellt), 'M'

Darstellung:

           S  EEEEEEEEEEE   MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
bits:     63 62         52 51                                                  0

Wie Sie feststellen können, schrieb ich, dass die Mantisse hat, in beiden Typen, ein bisschen mehr Informationen zu seiner Darstellung verglichen. In der Tat ist der Mantisse eine Zahl ohne alle seine nicht-significative 0 vertreten. Zum Beispiel:

  • 0.000124 wird 0,124 × 10 -3
  • 237,141 wird 0,237141 × 10 3

Das bedeutet, dass die Mantisse immer in der Form

0.α 1 α 2 ... α t × β p

wobei β ist die Basis der Repräsentation. Da aber der Anteil ist eine binäre Zahl, α 1 wird immer gleich 1, so kann der Anteil neu geschrieben werden als 1.α 2 α 3 ... α t + 1 x 2 p und die anfänglichen 1 implizit angenommen werden kann, für ein zusätzliches Bit macht Platz (α t + 1 ).

Nun, es ist natürlich wahr, dass das Doppelte von 32 64 ist, aber das ist nicht, wo das Wort herkommt.

Genauigkeit gibt die Anzahl der Dezimalziffern, die richtige , das heißt ohne jede Art von Darstellungsfehler oder Approximation. Mit anderen Worten gibt es, wie viele Dezimalstellen kann man sicher verwenden.

Mit diesem wird gesagt, es ist einfach, die Anzahl der Dezimalstellen zu schätzen, die sicher verwendet werden können:

  • single precision : log 10 (2 24 ), die etwa 7 ~ 8 Dezimalziffern
  • ist
  • double precision : log 10 (2 53 ), die etwa 15 ~ 16 Dezimalziffern
  • ist

Okay, ist der grundlegende Unterschied in der Maschine, die doppelte Genauigkeit doppelt so viele Bits wie einzelne verwendet. Bei der üblichen Implementierung ist, dass 32 Bits für Einzel-, 64 Bits für Doppel.

Aber was bedeutet, dass bedeutet ? Wenn wir den IEEE-Standard, dann eine Zahl mit einfacher Genauigkeit hat etwa 23 Bits der Mantisse und einen maximalen Exponenten von etwa 38 annehmen; eine doppelte Genauigkeit hat 52 Bits für die Mantisse und einen maximalen Exponenten von etwa 308.

Die Details sind unter Wikipedia , wie üblich.

So fügen Sie zu all den wunderbaren Antworten hier

Vor allem float und Doppel werden sowohl für die Darstellung von Zahlen Bruchzahlen. So ergibt sich die Differenz zwischen den beiden aus der Tatsache, mit wie viel Präzision sie die Zahlen speichern kann.

  

Beispiel: Ich habe 123.456789 speichern Man kann nur 123.4567 speichern können, während andere in der Lage sein können, die genauen 123.456789 speichern

.
So

, im Grunde wollen wir wissen, wie viel genau die Nummer gespeichert werden und ist das, was wir nennen Präzision.

Zitiert @Alessandro hier

  

Die Genauigkeit gibt die Anzahl der Dezimalstellen, die richtig ,   das heißt, ohne jede Art von Darstellungsfehler oder eine Näherung. Im   Mit anderen Worten, es gibt an, wie viele Dezimalstellen kann man sicher verwenden.

Float genau speichert etwa 7-8 Ziffern im Bruchteil während Doppel genau speichern etwa 15-16 Ziffern im Bruchteil

So, float speichern die doppelte Menge an Bruchteil. Deshalb Doppel heißt Doppel der Schwimmer

In Bezug auf die Frage: „Kann die ps3 und xbxo 360 mit doppelter Genauigkeit Gleitkomma-Operationen oder nur mit einfacher Genauigkeit und in generel Einsatz abziehen die doppelte Genauigkeit Fähigkeiten Gebrauch gemacht (falls vorhanden?).“

Ich glaube, dass beide Plattformen unfähig Doppel Gleitkomma sind. Der ursprüngliche Zellprozessor hatte nur 32-Bit-Schwimmern, das gleiche mit der ATI-Hardware, die die XBox 360 basiert auf (R600). Die Zelle wurde doppelt später Unterstützung auf schwimmende, aber ich bin mir ziemlich sicher, dass der PS3 nicht, dass chippery verwenden.

Grundsätzlich single precision Gleitkommazahl arithmetische beschäftigt sich mit 32-Bit-Gleitkommazahlen während double precision befasst sich mit 64 Bit.

Die Anzahl der Bits in doppelter Genauigkeit erhöht den Maximalwert, der als Erhöhung der Präzision als auch gespeichert werden kann (dh die Anzahl der signifikanten Ziffern).

doppelte Genauigkeit bedeutet, dass die Zahlen nehmen die doppelte Wortlänge zu speichern. Auf einem 32-Bit-Prozessor, sind die Worte, alle 32 Bits, so verdoppelt sind 64 Bit. Was dies bedeutet in Bezug auf die Leistung ist, dass Operationen auf Zahlen mit doppelter Genauigkeit ein wenig länger dauern auszuführen. So erhalten Sie eine bessere Reichweite, aber es ist ein kleiner Hit auf die Leistung. Dieser Erfolg ist ein wenig von Hardware-Gleitkomma-Einheiten gemildert, aber es ist immer noch da.

Die N64 verwendet, um ein MIPS R4300i-basierten NEC VR4300, die ein 64-Bit-Prozessor ist, und Der Prozessor kommuniziert mit dem Rest des Systems über einen 32-Bit breiten Bus. So verwendet die meisten Entwickler 32-Bit-Zahlen, weil sie schneller sind, und die meisten Spiele zu der Zeit nicht brauchen die zusätzliche Präzision (so sie verwendet Schwimmern nicht verdoppelt).

Alle drei Systeme können tun einfacher und doppelter Genauigkeit Operationen schwimmen, aber sie könnten nicht wegen der Leistung. (Obwohl so ziemlich alles, was nach dem n64 verwendet, um einen 32-Bit-Bus so ...)

Nach dem IEEE754 • Standard für Gleitkomma-Speicher • 32 und 64-Bit-Standards (mit einfacher Genauigkeit und doppelter Genauigkeit) • 8 und 11 Bit-Exponenten bzw. • Erweiterte Formate (sowohl Mantisse und Exponent) für Zwischenergebnisse

Vor allem Schwimmer und Doppel werden sowohl für die Darstellung von Zahlen Bruchzahlen verwendet. So ist der Unterschied zwischen den beiden ergibt sich aus der Tatsache, mit wie viel Präzision sie die Zahlen speichern kann.

Zum Beispiel: Ich habe 123.456789 speichern Ein in der Lage sein nur 123.4567 zu speichern, während andere in der Lage sein, die genauen 123.456789 speichern

. So

, im Grunde wollen wir wissen, wie viel genau die Nummer gespeichert werden und ist das, was wir Präzision nennen.

Zitiert @Alessandro hier

Die Genauigkeit gibt die Anzahl der Dezimalziffern, die korrekt sind, das heißt ohne jede Art von Darstellungsfehler oder eine Näherung. Mit anderen Worten gibt es, wie viele Dezimalstellen man sicher verwenden kann.

Float kann etwa 7-8 Ziffern im Bruchteil genau speichern, während Doppel genau ca. 15-16 Ziffern im Bruchteil speichern

So, doppelt speichern kann als der Schwimmer die doppelte Menge an Bruchteil. Deshalb ist doppelt so hoch ist das Doppelte der Schwimmer genannt

Single precision Nummer verwendet 32 bits, mit MSB als Vorzeichen-bit, während die double-precision-Zahl verwendet 64-bit, MSB als Vorzeichen-bit

Single precision

SEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFF.(SIGN+EXPONENT+SIGNIFICAND)

Double precision:

SEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF.(SIGN+EXPONENT+SIGNIFICAND)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top