diferenças de precisão em matlab e c ++

Eu estou tentando fazer testes de equivalência em um algoritmo escrito em C ++ e no Matlab. O algoritmo contém algum tipo de loop no tempo e é executado mais de 1.000 vezes. Tem operações aritméticas e algumas funções matemáticas.

Eu alimento as entradas iniciais para ambas as plataformas manualmente (como a = 1.767, b = 6.65, ...) e quando eu verifico as representações hexadecimais dessas entradas elas são as mesmas. Então não há problema para entradas. E obter as saídas de c ++ para matlab por um arquivo de texto com 16 dígitos decimais. (eu uso "setprecision (32)" declaração)

Mas aqui vem o problema; embora após o 614º passo de ambos os códigos, todos os resultados são exatamente os mesmos, no passo de 615 eu tenho uma diferença sobre 2.xxx..xxe-19? E após este passo, o erro torna-se maior e maior, e no final das execuções é sobre 5.xx..xxe-14.

0x3ff1 3e42 a211 6cca ---> [função C ++] ---> 0x3ff4 7619 7005 5a42

0x3ff1 3e42 a211 6cca ---> [função MATLAB] ---> ans

ans - 0x3ff4 7619 7005 5a42

= 2.xxx..xxe-19

Eu procurei como o Matlab se comporta os números e encontrei coisas realmente interessantes como "mantissa desnormalizada". Enquanto o realmin é sobre o e-308, ao desnormalizar o mantissa, o matlab tem o menor número real de e-324. Além disso, o matlab contém muitos mais dígitos para "pi" ou "exp (1)" do que para c ++.

Por outro lado, o matlab help diz que, seja qual for o formato exibido, o matlab usa a precisão dupla internamente.

Então, eu realmente aprecio se alguém explica qual é a razão exata para essas diferenças? Como podemos fazer testes de equivalência em Matlab e C ++?

questionAnswers(3)

yourAnswerToTheQuestion