我想编制一份关于数学编程优化的技巧和诀窍列表,通常我在论坛中读到这样的内容: 使用距离平方值比较距离,因为平方根计算更昂贵 (变量* 0.5)比(变量/ 2.0)更快 作为一个编程爱好者,我希望在优化方面尽力而为,非常感谢您的任何贡献。
两个关键点。 测量 - 不要假设你知道什么是缓慢的和/或为什么。在实际生产代码中进行测量。然后只担心占用大部分时间的部分。 优化算法而不是代码。查找o(N^2)而不是o(N)或o(N)而不是o(ln(N))的操作,并切换到具有更好渐进行为的算法。
我认为,在考虑优化之前,首先要确定库的范围和预期目的。例如,这个库是2D还是3D的?它是否包含几何算法,如凸包?像大多数开发此类库的人一样,您将遇到一些不可避免的问题。例如精度误差有时确实会让您发疯。还要注意退化三角形。仔细考虑包括epsilon或容限的算法。这是一个很好的功能,但会使您的算法更加复杂。如果您涉足3D领域,请分别处理点和向量(这是3D数学中最常见的问题之一)。考虑使用元编程进行模板乘法(我感觉这个会被批评),因为它可以大大加快渲染速度。总的来说,尽量避免除了实质性算法以外的任何虚拟调用,如向量或点等小类不应该被继承(又是另一个被批评的机会)。我建议从坚持良好的开发实践开始,阅读Scott Meyers的《Effective C++》和《More Effective C++》。如果您采取了捷径,例如将平方值与根号计算进行比较,请注释您的代码,以便未来的开发人员可以理解数学。最后,不要试图过度优化,使用分析器进行优化。个人经验是,我经常先编写最优雅的解决方案(应该说是我认为最优雅的解决方案),然后再进行优化,您会惊讶于C++优化器通常能够完成多好的工作。希望这可以帮助您。马丁