Artikel-ID: 69333 - Geändert am: Dienstag, 16. August 2005 - Version: 2.2

So arbeiten, um Probleme bei Gleitkommatypen Genauigkeit-Vergleich

SystemtippDieser Artikel bezieht sich auf ein anderes Betriebssystem als das von Ihnen verwendete. Für Sie möglicherweise nicht relevante Artikelinhalte wurden deaktiviert.
Alles erweitern | Alles schließen

Zusammenfassung

Um zuverlässig testen, ob zwei Gleitkommazahlen Variablen oder Ausdrücke sind gleich (mithilfe von IEEE-Format oder MBF), müssen Sie subtrahieren Sie die beiden Variablen verglichen und testen, ob die Differenz kleiner als ein Wert an die Grenzen des Bedeutung für einfache oder doppelte Genauigkeit ist. KEINE ANDEREN TEST AUF GLEICHHEIT WERDEN ZUVERLÄSSIG. Die folgenden Formeln testen zuverlässig, ob X und Y gleich sind:

  1. Sie müssen für einfacher Genauigkeit testen, ob die Differenz von X und Y ist kleiner als der Wert 7 signifikanten Stellen X kleiner oder Y. Dividieren X oder Y von 10 ^ 7, um den Vergleichswert zu ermitteln. Zum Beispiel:
          ' To try this example in VBDOS.EXE:
          ' 1. From the File menu, choose New Project.
          ' 2. Copy the code example to the Code window.
          ' 3. Press F5 to run the program.
    
          IF ABS(X! - Y!) <= (X! / 10^7) THEN
             PRINT "Equal within 7 digits"
          ENDIF
    						
  2. Sie müssen für double Precision testen, ob die Differenz von X und Y ist kleiner als der Wert 15 signifikanten Stellen X kleiner oder Y. Dividieren X oder Y von 10 ^ 15, um den Vergleichswert zu ermitteln. Zum Beispiel:
          ' To try this example in VBDOS.EXE:
          ' 1. From the File menu, choose New Project.
          ' 2. Copy the code example to the Code window.
          ' 3. Press F5 to run the program.
    
          IF ABS(X# - Y#) <= (X# / 10^15) THEN
             PRINT "Equal within 15 digits"
          ENDIF
    						
IEEE-Gleitkommaformat ist im Standard und Professional Edition von Microsoft Visual Basic für MS-DOS, Version 1.0, in Microsoft QuickBasic für MS-DOS (nur QB87.EXE Coprozessor Version), Versionen 3.0, 4.0, 4.0b und 4.5; in Microsoft Basic-Compiler für MS-DOS und MS OS/2, Versionen 6.0 und 6.0 b; und in Microsoft Basic Professional Development System (PDS) für MS-DOS und MS OS/2, Versionen 7.0 und 7.1 gefunden.

MBF (Microsoft Binärformat) wurde in Microsoft QuickBasic für MS-DOS (nur QB.EXE nicht Coprozessor Version), Versionen 1.0, 1.01, 2.0, 2.01 und 3.0 und Microsoft GW-Basic-Interpreter für MS-DOS-Versionen 3.2, 3.22 und 3.23 gefunden.

Die Informationen in diesem Artikel ist auch in der Hilfedatei mit der Standard und Professional Edition von Microsoft Visual Basic für MS-DOS, Version 1.0 bereitgestellten enthalten.

Weitere Informationen

Hinweis: Significant Ziffern in einer berechneten Anzahl kann aufgrund von der folgenden sein: mehrere Berechnungen, insbesondere Addition der Zahlen in Wert weit auseinander oder Subtraktion von Zahlen in Wert vergleichbar. Wenn eine Zahl Ergebnisse aus mehreren Berechnungen müssen Sie den Test auf Gleichheit mit weniger signifikante Stellen mathematischen Verlust den signifikanten Ziffern entsprechend ändern. Wenn der Test von Bedeutung zu viele signifikante Ziffern verwendet wird, können Sie nicht ermitteln, dass Zahlen, die auf Gleichheit verglichen innerhalb der möglichen Genauigkeit tatsächlich gleich sind.

In den oben aufgeführten Basic Produkten, die IEEE-Gleitkommaformat verwenden, werden Zwischenberechnungen in einen internen 64-Bit-temporäre Register durchgeführt mit mehr Bits Genauigkeit als in Variablen mit einfacher Genauigkeit oder mit doppelter Genauigkeit gespeichert sind. Dies führt häufig in einer Anweisung welche Zustände, die die intermediate Berechnung nicht gleich dem verglichenen Ausdruck ist ein Fehler zurückgegeben. Zum Beispiel:
   X = 25
   Y = 60.1
   IF 1502.5 = (X * Y) THEN PRINT "equal"
				
mit den oben stehenden Code wird nicht gedruckt "gleich". Im Gegensatz dazu die folgende Methode mit einer Variablen Platzhalter "gleich" gedruckt, jedoch ist noch immer keine zuverlässige Technik als ein Test auf Gleichheit:
   Z = 25 * 60.1
   IF 1502.5 = Z THEN PRINT "equal"
				
Notiz, die expliziter numerischer Typ umgewandelt (! für einfacher Genauigkeit, # für double Precision) wirken sich die Genauigkeit, in denen Berechnungen gespeichert und gedruckt werden. Jeweils Typ umwandeln Sie durchführen, möglicherweise immer noch angezeigt unerwartete Ergebnisse Rundung:
   PRINT 69.82! + 1    ' Single precision, prints 70.82.
   PRINT 69.82# + 1    ' Double precision, prints 70.81999999999999.
				
für eine genaue Dezimalsystem (Basis 10) numerische Darstellung, wie z. B. für Berechnungen von Dollar und Cent, sollten Sie die CURRENCY-Datentyp in Visual Basic für MS-DOS, Version 1.0 und Basic PDS für MS-DOS, Versionen 7.0 und 7.1 gefunden (@). Der CURRENCY-Datentyp speichert genau bis zu 19 Ziffern mit 4 Ziffern nach der Dezimalstelle.

Verweis:

IEEE- und MBF-Standards versuchen, Genauigkeit und Präzision bei numerischen Bereich und Geschwindigkeit auszugleichen. Genauigkeit misst, wie viele signifikanten Bits des Genauigkeit in Berechnungen verloren gegangen sind. Genauigkeit bezieht sich auf die Anzahl der Bits in der Mantisse, die bestimmt, wie viele Dezimalstellen dargestellt werden können.

IEEE-Format und MBF gespeichert werden Nummern der dem Formular 1.x Potenz von y (wobei x und y sind base 2 Zahlen; X die Mantisse und y ist der Exponent).

MBF einfacher Genauigkeit 24 Bits der Mantisse hat, und mit doppelter Genauigkeit hat der Mantisse 56 Bits. Alle MBF-Berechnungen werden innerhalb von nur 24 oder 56 Bits durchgeführt.

IEEE einfacher Genauigkeit 24 Bits der Mantisse hat, und mit doppelter Genauigkeit 53 Bits der Mantisse hat. In einem temporären 64-Bit-Register für Genauigkeit alle mit einfacher Genauigkeit und doppelter Genauigkeit IEEE Berechnungen in Visual Basic für MS-DOS, Version 1.0; QuickBasic für MS-DOS, Versionen 3.0/4.x; in Basic-Compiler für MS-DOS, Versionen 6.0 und 6.0 b; und Basic PDS für MS-DOS, Versionen 7.0 und 7.1re jedoch ausgeführt. Folglich sind IEEE Berechnungen genauer als MBF-Berechnungen, trotz des MBF-Fähigkeit, mehr Bits mit doppelter Genauigkeit dar.

Die meisten Zahlen im Dezimalsystem (Basis 10) Notation verfügen eine genaue Darstellung nicht in das Gleitkomma Binary (Basis 2)-Speicherformat in Datentypen mit einfacher Genauigkeit und mit doppelter Genauigkeit verwendet. Sowohl IEEE-Format als auch MBF kann nicht genau darstellen (und Rundung müssen) alle Zahlen, die nicht von dem Formular 1.x mit der Potenz y sind (wobei x und y sind Zahlen, base 2). Zahlen, die genau dargestellt werden können, werden über einen großen Bereich verteilt. Eine hohe Dichte von darstellbar Zahlen ist in der Nähe 1.0 und 1.0, aber weniger und weniger darstellbare Zahlen auftreten, wenn die Zahlen in Richtung 0 oder unendlich wechseln.

Die oben genannten Einschränkungen verursachen häufig Basic zu Ergebnissen Gleitkommazahlen anders als Sie erwarten. Weitere Informationen zu diesem Thema sich in der Microsoft Knowledge Base befindet durch Abfragen auf der folgenden Wörter:
Floating Point und Format und QuickBasic
IEEE unverankerte Punkt Format wird in den folgenden Handbüchern beschrieben:

  1. Seiten 16 bis 21 des "Microsoft QuickBasic 4.0: Basic Language Reference" für QuickBasic für MS-DOS, Versionen 4.0 und 4.0b. Beachten Sie dass 4.0 Handbücher eine Korrektur auf Seite 19, um das Codebeispiel MHex $, wie in einem separaten Artikel der Microsoft Knowledge Base durch Abfragen der folgenden Wörter gefunden erläutert müssen:
    MHex $ und 19
  2. Seiten 12-17 "Microsoft QuickBasic 4.5: Basic Language Reference" für QuickBasic für MS-DOS, Version 4.5. Beachten Sie, dass diese optionale manuelle separat mithilfe einer Reihenfolge Karte enthaltene Version 4.5 bestellt werden muss.
  3. Seiten 702 705 von der "Microsoft Basic 7.0: Programmer's Guide" für Microsoft Basic PDS für MS-DOS, Versionen 7.0 und 7.1.
MBF unverankerte Punkt Format wird in einem separaten Artikel beschrieben, die in der Microsoft Knowledge Base Abfragen auf der folgenden Wörter gefunden werden können:
MBF und Konvertierung und exponent

Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual Basic for MS-DOS
  • Microsoft QuickBasic 4.0
  • Microsoft QuickBASIC 4.0b
  • Microsoft QuickBasic 4.5 für MS-DOS
  • Microsoft BASIC Compiler 6.0
  • Microsoft BASIC Compiler 6.0b
  • Microsoft BASIC Professional Development System 7.0
  • Microsoft BASIC Professional Development System 7.1
  • Microsoft GW-BASIC 3.2
  • Microsoft GW-BASIC 3.22
  • Microsoft GW-BASIC 3.23
Keywords: 
kbmt kbhowto KB69333 KbMtde
Maschinell übersetzter ArtikelMaschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 69333  (http://support.microsoft.com/kb/69333/en-us/ )
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Retired KB ArticleDisclaimer zu nicht mehr gepflegten KB-Inhalten
Dieser Artikel wurde für Produkte verfasst, für die Microsoft keinen Support mehr anbietet. Der Artikel wird deshalb in der vorliegenden Form bereitgestellt und nicht mehr weiter aktualisiert.