Ich implementiere einen Hardware-Doppelpräzisions-Addierer mit Verilog. Während der Verifikationsphase, als ich meine Hardware-Ausgabe mit MATLAB (oder C) doppelt präzisen Additionsausgaben verglichen habe, habe ich einige seltsame Fälle gefunden, in denen das LSB nicht übereinstimmt, wobei ich den gleichen Rundungsmodus verwende (Runde zur nächsten geraden) . Meine Frage betrifft die Genauigkeit der C-Berechnung, ist sie wirklich genau beim Runden oder ist sie auf eine CPU-Architektur (32 oder 64 Bits) beschränkt?Gleitkomma-Addition mit LSB-Fehler
Hier ist ein Beispiel,
A = 0x62a5a1c59bd10037 = 1.5944933396238637e + 167
B = 0x62724bc40659bf0c = 1.685748657333889e + 166 = 0.1685748657333889e + 167
Die richtige Ausgabe (nur durch den Zusatz tun manuell die obigen reellen Zahlen)
= 1.7630682053572526e + 167 = 0x62a7eb3e1c9c3819 (dies entspricht meine Hardware)
Wenn ich versuche, A + B in C zu tun, ist das Ergebnis gleich
= 1.7630682053572525e + 167 = 0x62a7eb3e1c9c3818
Wenn ich diese Anwendung versuchen, die Zwischenoperationen http://www.ecs.umass.edu/ece/koren/arith/simulator/FPAdd/
kann ich überprüfen von der Mantissen-Addition sieht man, dass C die Rundung nicht korrekt durchführt (auf die nächste gerade Runde). In diesem Fall sollte die Mantisse durch Hinzufügen von Eins abgerundet werden. Irgendeine Idee, warum das passiert?