距离平方与距离的实际性能优势

时间:2016-05-30 19:54:41

标签: java performance distance sqrt math.sqrt

当计算Java中两个3D点之间的距离时,我可以计算距离或它们之间的距离,避免调用Math.sqrt。

在本地,我已经读过sqrt只是乘法速度的四分之一,这使得使用距离平方的不便不值得。

在Java中,乘法和计算平方根之间的绝对性能差异是什么?

1 个答案:

答案 0 :(得分:0)

我最初想把它添加为评论,但它开始出价过高,所以这里有:

亲自尝试一下。使用10.000次迭代创建一个循环,您只需计算a*a + b*b和另一个计算Math.sqrt(a*a + b*a)的单独循环。时间,你会知道。计算square root是一个迭代过程,其中数字(计算机位)平方根收敛于给定数字的实平方根,直到它足够接近(每次迭代之间的差异小于一些非常小的价值)。除了Math库使用的算法之外,还有多种算法,它们的速度取决于输入以及算法的设计方式。在我看来坚持Math.sqrt(...),不会出错,并且已经过很多人的测试。

虽然对于一个平方根可以非常快地完成,但是有一个明确的可观察时间差异。

旁注:我想不出有多次计算平方根的理由,通常是在最后。如果您想知道点之间的距离,只需使用该距离的平方值作为默认值,并根据该默认值进行比较/求和/减法或任何您想要的值。

PS:如果您想要更“实用”的答案,请提供更多代码