matlab ec diferem com a função cos
Tenho um programa implementado no matlab e o mesmo programa em c, e os resultados difere
Estou um pouco confuso que a função cos não retorne exatamente o mesmo resultad
Uso o mesmo computador, Intel Core 2 Duo e 8 bytes de tipo de dados duplo nos dois caso
Por que o resultado difere?
Aqui está o teste:
c:
double a = 2.89308776595231886830;
double b = cos(a);
printf("a = %.50f\n", a);
printf("b = %.50f\n", b);
printf("sizeof(a): %ld\n", sizeof(a));
printf("sizeof(b): %ld\n", sizeof(b));
a = 2.89308776595231886830106304842047393321990966796875
b = -0.96928123535654842068964853751822374761104583740234
sizeof(a): 8
sizeof(b): 8
matlab:
a = 2.89308776595231886830
b = cos(a);
fprintf('a = %.50f\n', a);
fprintf('b = %.50f\n', b);
whos('a')
whos('b')
a = 2.89308776595231886830106304842047393321990966796875
b = -0.96928123535654830966734607500256970524787902832031
Name Size Bytes Class Attributes
a 1x1 8 double
Name Size Bytes Class Attributes
b 1x1 8 double
So, b differ a bit (very slightly, but enough to make my debuging task difficult)
b = -0.96928123535654842068964853751822374761104583740234 c
b = -0.96928123535654830966734607500256970524787902832031 matlab
Uso o mesmo computador, o Intel Core 2 Duo e o tipo de dados duplo de 8 byte
Por que o resultado difere?
Matlab não usa o hardware da função cos embutido na Inte
Existe uma maneira simples de usar a mesma função cos no matlab ec (com resultados exatos), mesmo que um pouco mais lenta, para que eu possa comparar com segurança os resultados do meu programa matlab e
Atualizar
Muito obrigado por suas respostas
Então, como você apontou, a função cos do matlab ec é diferente. Isso é incrível! Eu pensei que eles estavam usando a função cos embutida no microprocessador Inte
A versão cos do matlab é igual (pelo menos para este teste) à versão do matlab. você também pode tentar no matlab: b = java.lang.Math.cos (a)
Então, eu fiz uma pequena função MEX para usar a versão cos c do matlab, e funciona bem; Isso me permite depurar o meu programa (o mesmo implementado no matlab ec) e ver em que ponto eles diferem, qual era o objetivo deste post.
A única coisa é que chamar a versão MEX c cos do matlab é muito lent
gora estou tentando chamar a função Java cos de c (como é o mesmo do matlab), veja se isso é mais rápid