【发布时间】:2011-12-09 13:19:03
【问题描述】:
double r2 = dx * dx + dy * dy;
double r3 = r2 * sqrt(r2);
第二行可以换成更快的吗?不涉及sqrt的东西?
【问题讨论】:
-
@nyarlathotep:假设
r是sqrt(dx * dx + dy * dy)。 -
@nyarlathotep 你错过了重点。如果 r = (dxdx + dydy)^(1/2),则 r2 = r^2。但这不是问题。
-
我要冒昧地说,顺便提一下问题,从技术上讲,答案是否定的。原因很简单,如果给你 r^2,你不知道 r 的符号,那么如何计算 r^3?我想你真正要问的是,给定向量的平方范数,你能有效地找到立方范数吗?
-
根据您需要的精度和 dx/dy 比率,您可以尝试泰勒级数 ( 1+x )^( 1/2 ) = 1 + ( 1/2 )*x - ( 1/8 )*x^2 + ... 其中 x = ( dx/dy )^2
-
@SteveJessop:到目前为止 3 个答案,而不是一个长凳/拆卸。我不认为人们真的有兴趣找到更快的答案,他们只是把他们能想到的任何东西扔给暴徒......
标签: c++ performance floating-point distance square-root