У меня есть программа реализована в Matlab и та же программа на c, и результаты отличаются.
Я немного озадачен тем, что функция cos не возвращает точно такой же результат.
Я использую тот же компьютер, Intel Core 2 Duo и 8 байт двойного типа данных i В обоих случаях.
Почему результат отличается?
Вот тест:
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
Я использую тот же компьютер, Intel Core 2 Duo и 8-байтовый двойной тип данных.
Почему результат отличается?
Matlab не использует аппаратную функцию cos, встроенную в Intel?
Есть ли простой способ использовать одну и ту же функцию cos в Matlab и c (с точными результатами) , даже если немного медленнее, чтобы я мог безопасно сравнить результаты моей программы Matlab и c?
Обновление:
большое спасибо за ваши ответы!
Итак, как вы отметили, функции cos для Matlab и c различаются. Это потрясающе! Я думал, они использовали функцию cos, встроенную в микропроцессор Intel.
Cos-версия Matlab равна (по крайней мере, для этого теста) версии Matlab. вы также можете попробовать из Matlab: b = java.lang.Math.cos (a)
Затем я сделал небольшую функцию MEX, чтобы использовать версию cos c изнутри Matlab, и она отлично работает; Это позволяет мне отлаживать мою программу (ту же, что реализована в Matlab и c) и видеть, в чем они отличаются, что и было целью этой публикации.
Единственное, что вызвать версию MEX c cos из Matlab - это слишком медленно.
Сейчас я пытаюсь вызвать функцию Java cos из c (как и из Matlab), посмотрим, пойдет ли это быстрее.