C ++ Разница с плавающей точкой - PullRequest
2 голосов
/ 14 января 2020

Я пытаюсь получить одинаковые результаты на 2 разных платформах, т.е. Solaris и Linux (Sun-Studio против G CC). Весь код использует двойной тип данных. Но когда я печатаю вывод, я вижу различия в плавающей запятой (как в 20-м десятичном знаке).

Мне нужно знать, могу ли я установить флаг компилятора, чтобы компилятор G CC и sun-studio вели себя одинаково. Прикрепленное изображение показывает разницу в типе данных Double. Левая сторона - это выход от G CC, а другая - от Sun-Studio.

enter image description here

1 Ответ

9 голосов
/ 14 января 2020

Основная проблема заключается в следующем:

Я пытаюсь получить одинаковые результаты на 2 разных платформах

Вам не гарантируется, что у вас будет одинаковое результаты на двух разных платформах. Они могут отличаться по многим параметрам в том, как они реализуют плавающие операции.

Одно решение вашей проблемы: арифметика с фиксированной точкой c.

Кроме того, взгляните на следующие ответы:

Кросс-платформенная согласованность с плавающей точкой

Являются ли IEEE числа с плавающей запятой и двойные гарантированно равными такого же размера в любой ОС?

Они - неплохое начало для понимания происходящего.

...