Для домашней работы для компьютерной графики мы должны написать функцию, которая определяет, находится ли точка p
с левой стороны от края p1
до p2
. Теперь у моего партнера и у меня есть две разные версии этой функции, которые дают разные результаты, несмотря на то, что они вычисляют то же самое.Разница между фрагментами C++, которые должны быть идентичными
Отрывок 1:
// The direction of the line from p1 to p:
float lineX = p.x - p1.x;
float lineY = p.y - p1.y;
// The direction of the triangle's edge from p1 to p2:
float edgeX = p2.x - p1.x;
float edgeY = p2.y - p1.x;
// The z component of the cross product (line x edge):
float F = lineX * edgeY - lineY * edgeX;
Отрывок 2:
float x = p.x;
float y = p.y;
float X = p1.x;
float Y = p1.y;
float dX = p2.x - p1.x;
float dY = p2.y - p1.y;
float F = ((x-X) * dY - (y-Y) * dX);
Я знаю, что операции с плавающей точкой не является коммутативной ни ассоциативной. Однако, по моему мнению, порядок расчетов должен быть точно таким же, начиная с lineX = x-X
и edgeX = dX
.
Есть ли какая-то оптимизация компилятора, которая мешает вычислениям?
Да. Я тупой. : D Спасибо! :) – J0hj0h