0
コンピュータグラフィックスの宿題の場合、p
が端の左側にあるかどうかを判断する関数を記述する必要があります。p1
〜p2
。今私のパートナーと私は、同じことを計算しているにもかかわらず、異なる結果を生み出すこの関数の2つの異なるバージョンを持っています。同一でなければならない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