matlab и c отличаются функцией cos

У меня есть программа реализована в 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), посмотрим, пойдет ли это быстрее.

8
задан Amro 2 October 2011 в 17:48
поделиться