【发布时间】:2010-07-03 07:29:29
【问题描述】:
由于 java.lang.Math 中的三角函数非常慢:是否有一个库可以快速且良好地进行近似?在不损失太多精度的情况下,似乎可以将计算速度提高几倍。 (在我的机器上,乘法需要 1.5ns,java.lang.Math.sin 需要 46ns 到 116ns)。不幸的是,目前还没有使用硬件功能的方法。
更新:函数应该足够准确,例如 GPS 计算。这意味着您需要至少 7 个十进制数字的准确性,这排除了简单的查找表。它应该比基本 x86 系统上的 java.lang.Math.sin 快得多。否则就没有意义了。
对于超过 pi/4 的值,除了硬件功能之外,Java 还执行 some expensive computations。这样做是有充分理由的,但有时您更关心速度而不是最后一点的准确性。
【问题讨论】:
-
有多快,多好?您总是可以只使用泰勒级数的前几个术语...这非常快速且随心所欲。
-
永远不要使用泰勒级数。看我的回答stackoverflow.com/questions/345085/…
-
完全错误,每个近似值都有时间和地点。当然,我通常不会使用超过两个或三个泰勒近似项,但对于正弦、余弦和指数,它们会很好地收敛。参加一两门数值分析课程,您可能会学到一些东西。
-
我支持我的评论。永远不要使用泰勒级数。它们针对非常接近单点的功能评估进行了优化。 x - x^3/6 在大约 pi/4 的值处开始丢失,即使这样,准确性也很粗糙。最小二乘拟合很容易做到。
-
泰勒级数可以惊人地准确:Taylor series approximations, illustrated.
标签: java optimization math trigonometry