首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >变量与长算法

变量与长算法
EN

Stack Overflow用户
提问于 2011-10-11 20:57:23
回答 4查看 125关注 0票数 0

使用这两种算法之间的区别是什么。我一直想知道我应该如何优化things.How,它们在内存和速度方面有区别吗?一个比另一个好吗?除了代码清晰度之外,我的意思是。

这是我的第一个版本:

代码语言:javascript
复制
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);
}

这种方法是相同的,但它不在变量中保存任何值,它只使用了一次长时间的计算

代码语言:javascript
复制
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))));
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-11 21:03:15

在适当的优化选项下,这两种算法将编译成完全相同的代码。由于前者的可读性要好得多,因此它无疑是两个中更好的一个。

优化这段代码的正确方法不是去掉变量(编译器可以帮你做到这一点),而是去掉sqrt操作:只比较平方距离。

票数 5
EN

Stack Overflow用户

发布于 2011-10-11 21:03:30

哪一个更容易维护?

我认为你的第一个版本更简单,因为它分解了各个部分,并使vectorBetween变得明显,因为你要重用它几次。

现在,至于哪一个更快...聪明的编译器可能会弄清楚如何使两者的速度相同。在你需要之前不要太担心这一点。不管怎样,我们在这里讨论的是O(1)差异,所以如果你确实是在一个紧凑的循环中做到这一点,那么只需测试两个版本。然后你就会知道哪一个更快!

票数 1
EN

Stack Overflow用户

发布于 2011-10-11 21:05:11

做对你来说最清楚的事情。如果存在性能问题,请尝试其他解决方案。如果没有关于所使用的D3DXVECTOR3的类型、operator-的返回值以及许多其他因素的更准确的信息,甚至不可能猜测哪个更快。除非你知道这段代码是关键的,否则这并不重要。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7726384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档