1

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

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

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

4

1 回答 1

1

我最初想将此添加为评论,但它开始变得太高了,所以这里是:

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

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

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

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

于 2016-05-30T20:10:37.013 回答