Я использую два следующих компилятора С++:
- cl.exe: Microsoft (R) C/С++ Оптимизация компилятора Версия 19.00.24210 для x86
- g++: g++ (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010
При использовании встроенной функции синуса я получаю разные результаты. Это не критично, но иногда результаты слишком важны для моего использования. Вот пример с "жестко запрограммированным" значением:
printf("%f\n", sin(5451939907183506432.0));
Результат с cl.exe:
0.528463
Результат с g++:
0.522491
Я знаю, что результат g++ более точен и что я могу использовать дополнительную библиотеку для получения этого же результата, но это не моя точка здесь. Я бы действительно понял, что здесь происходит: Почему cl.exe неправильно?
Забавно, если я применил по модулю (2 * pi) по параметру, то получим тот же результат, что и g++...
[EDIT] Просто потому, что мой пример выглядит сумасшедшим для некоторых из вас: это часть генератора псевдослучайных чисел. Не важно знать, является ли результат синуса точным или нет: нам просто нужно дать какой-то результат.