使用这两种算法之间的区别是什么。我一直想知道我应该如何优化things.How,它们在内存和速度方面有区别吗?一个比另一个好吗?除了代码清晰度之外,我的意思是。
这是我的第一个版本:
bool Intersects(BoundingSphere boundingSphere)
{
D3DXVECTOR3 vectorBetween = (centre - boundingSphere.centre);
// works out the distance between the sphere centre's using pythag
float distance = sqrt(
pow(vectorBetween.x, 2)
+ pow(vectorBetween.y, 2)
+ pow(vectorBetween.z, 2));
// if two radius's add to more than the distance between the centres
return (radius + boundingSphere.radius > distance);
}这种方法是相同的,但它不在变量中保存任何值,它只使用了一次长时间的计算
bool Intersects(BoundingSphere boundingSphere)
{
return (radius + boundingSphere.radius >
(sqrt(pow((centre - boundingSphere.centre).x, 2) +
pow((centre - boundingSphere.centre).y, 2) +
pow((centre - boundingSphere.centre).z, 2))));
}发布于 2011-10-11 21:03:15
在适当的优化选项下,这两种算法将编译成完全相同的代码。由于前者的可读性要好得多,因此它无疑是两个中更好的一个。
优化这段代码的正确方法不是去掉变量(编译器可以帮你做到这一点),而是去掉sqrt操作:只比较平方距离。
发布于 2011-10-11 21:03:30
哪一个更容易维护?
我认为你的第一个版本更简单,因为它分解了各个部分,并使vectorBetween变得明显,因为你要重用它几次。
现在,至于哪一个更快...聪明的编译器可能会弄清楚如何使两者的速度相同。在你需要之前不要太担心这一点。不管怎样,我们在这里讨论的是O(1)差异,所以如果你确实是在一个紧凑的循环中做到这一点,那么只需测试两个版本。然后你就会知道哪一个更快!
发布于 2011-10-11 21:05:11
做对你来说最清楚的事情。如果存在性能问题,请尝试其他解决方案。如果没有关于所使用的D3DXVECTOR3的类型、operator-的返回值以及许多其他因素的更准确的信息,甚至不可能猜测哪个更快。除非你知道这段代码是关键的,否则这并不重要。
https://stackoverflow.com/questions/7726384
复制相似问题