Diferencias de precisión en matlab y c ++.

Estoy tratando de hacer pruebas de equivalencia en un algoritmo escrito en C ++ y en Matlab. El algoritmo contiene algún tipo de bucle en el tiempo y se ejecuta más de 1000 veces. Tiene operaciones aritméticas y algunas funciones matemáticas.

Alimento manualmente las entradas iniciales a ambas plataformas (como a = 1.767, b = 6.65, ...) y cuando verifico las representaciones hexadecimales de esas entradas, son las mismas. Así que no hay problema para las entradas. Y obtenga las salidas de c ++ a matlab mediante un archivo de texto con 16 dígitos decimales. (Yo uso la declaración "setprecision (32)")

Pero aquí viene el problema; aunque después del paso 614 'de ambos códigos, todos los resultados son exactamente iguales, en el paso 615 obtengo una diferencia de 2.xxx..xxe-19? Y después de este paso, el error se hace cada vez más grande, y al final de las ejecuciones es de aproximadamente 5.xx..xxe-14.

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

0x3ff1 3e42 a211 6cca ---> [función MATLAB] ---> ans

ans - 0x3ff4 7619 7005 5a42

= 2.xxx..xxe-19

Busqué cómo se comportan los números en Matlab y encontré cosas realmente interesantes como "mantisa desnormalizada". Mientras que realmin es sobre e-308, al desnormalizar la mantisa, matlab tiene el número real más pequeño sobre e-324. Además, matlab tiene muchos más dígitos para "pi" o "exp (1)" que el de c ++.

Por otro lado, matlab help dice que sea cual sea el formato que muestre, matlab usa internamente la doble precisión.

Entonces, ¿realmente apreciaría si alguien explica cuál es la razón exacta de estas diferencias? ¿Cómo podemos hacer pruebas de equivalencia en matlab y c ++?

Respuestas a la pregunta(3)

Su respuesta a la pregunta