C ++片段之间的区别应该是相同的

时间:2016-11-20 15:44:25

标签: c++

对于计算机图形学的作业,我们必须编写一个函数,用于确定点p是否位于边{J}到p1的左侧。现在我和我的伙伴有两个不同版本的这个功能产生不同的结果,尽管计算相同的东西。

代码段1:

p2

代码段2:

// 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;

我知道浮点运算不是可交换的,也不是关联的。但是,根据我的理解,计算顺序应该完全相同,因为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。 是否有一些编译器优化与计算相混淆?

1 个答案:

答案 0 :(得分:4)

复制并粘贴错误:

float edgeX = p2.x - p1.x;
float edgeY = p2.y - p1.x;

(p1.x)?