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

标签 c++

对于计算机图形学的家庭作业,我们必须编写一个函数,它确定点 p 是否位于边 p1p2 的左侧。现在我和我的搭档有这个函数的两个不同版本,尽管计算的是相同的东西,但它们会产生不同的结果。

片段 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-XedgeX = dX
是否存在一些干扰计算的编译器优化?

最佳答案

复制粘贴错误:

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

(p1.x)?

关于c++ - 应该相同的 C++ 片段之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40705976/

相关文章:

c++ - 在c++中读取文件时fstream无限循环

c++ - 如何在 Lua 中手动销毁包装的 C++ 类

c++ - 尝试在 MinGW 的 G++ 中链接 SDL 失败得很惨.. :/

c++ - transform_iterator 编译问题

c++ - 将 Rob Hess 的 SIFT 库(使用 C 语言,使用 OpenCV)与 C++ 链接

c++ - 了解用于在 OpenGL 3.3+ 核心中使用三角形绘制四边形的代码

c++ - Strassen-Winograd 算法

c++ - 获取重载运算符的内存地址?

c++ - 当将二维数组打印到控制台时,值被随机设置

c++ - 这是什么错误? (为什么它不出现在其他类中?)