Präzisionsunterschiede in Matlab und C ++

Ich versuche, Äquivalenztests mit einem in C ++ und Matlab geschriebenen Algorithmus durchzuführen. Der Algorithmus enthält eine Art Zeitschleife und wird mehr als 1000 Mal ausgeführt. Es hat arithmetische Operationen und einige mathematische Funktionen.

Ich füttere beide Plattformen mit der Hand mit den anfänglichen Eingaben (wie a = 1.767, b = 6.65, ...) und wenn ich die hexadezimalen Darstellungen dieser Eingaben überprüfe, sind sie gleich. Also kein Problem für Eingaben. Und bringen Sie die Ausgaben von c ++ durch eine Textdatei mit 16 Dezimalstellen nach matlab. (Ich benutze "setprecision (32)" Anweisung)

Aber hier kommt das Problem; Obwohl nach dem 614. Schritt beider Codes alle Ergebnisse exakt gleich sind, erhalte ich beim Schritt 615 einen Unterschied von etwa 2 x x ... x e-19? Und nach diesem Schritt wird der Fehler immer größer und am Ende der Läufe ist es ungefähr 5.xx..xxe-14.

0x3ff1 3e42 a211 6cca ---> [C ++ - Funktion] ---> 0x3ff4 7619 7005 5a42

0x3ff1 3e42 a211 6cca ---> [MATLAB-Funktion] ---> ans

ans - 0x3ff4 7619 7005 5a42

= 2.xxx..xxe-19

Ich suchte nach dem Verhalten von matlab und fand wirklich interessante Dinge wie "denormalisierte Mantisse". Während realmin ungefähr e-308 ist, hat matlab durch Denormalisierung der Mantisse die kleinste reelle Zahl über e-324. Weiteres matlab enthält viel mehr Stellen für "pi" oder "exp (1)" als die von c ++.

Auf der anderen Seite gibt matlab help an, dass matlab unabhängig vom angezeigten Format intern die doppelte Genauigkeit verwendet.

Ich würde es also sehr begrüßen, wenn jemand den genauen Grund für diese Unterschiede erklärt. Wie können wir Äquivalenztests für Matlab und C ++ durchführen?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage