在stl中acos,atan函数是否使用了大量的cpu周期

jan*_*jan 3 c++ math optimization

我想计算两个向量之间的角度,但我已经看到这些反向触发操作,如acos和atan使用了大量的cpu周期.有没有办法在不使用这些功能的情况下完成计算?此外,当您进行优化时,这些真的会让您感到震惊吗?

Dav*_*ley 10

STL中没有这样的功能; 这些都在数学库中.

另外,你确定在这里有效率是否很重要?你有没有想过看看热点中是否有这样的功能调用?你知道使用这些功能时表现不好吗?在进行此类微观优化之前,您应该始终回答这些问题.

为了给出建议,你打算用它做什么?它有多准确?

如果您需要高精度的实际角度,您可能无法做得更好.如果需要进行比较,可以使用绝对值和点积来获得角度的余弦值.如果您不需要精度,则可以执行此操作并使用acos查找表.如果您将其用作另一个计算的输入,您可能可以使用一个小几何或可能是一个trig标识,以避免必须找到反余弦或反正切.

在任何情况下,一旦你完成了你要做的优化,在计时运行之前和之后做,看看你是否有任何显着的差异.