gpt4 book ai didi

java - 精确计算正弦和余弦函数

转载 作者:行者123 更新时间:2023-11-29 09:34:09 26 4
gpt4 key购买 nike

如何在 Java 中以一定的精度计算正弦和余弦函数?

因为标准 sincos 不允许这样做。

最佳答案

泰勒展开式(或更准确地说,麦克劳伦展开式,即关于 x=0 的泰勒展开式)不是执行此计算的好方法。大多数计算机使用 CORDIC algorithm - 它的优点是可以在有限次数的迭代中收敛到任意精度,并且只需要非常简单的数学运算。

另一件事要记住:你真的想从一个准确的方法开始,将参数 x 减少到 [0 pi/2] 范围内,注意符号使用简单逻辑的答案。当x变大时,麦克劳伦(泰勒)展开会震荡很长时间。

这意味着,除其他事项外,您需要知道 pi 的值至少是您想要的答案的位数,再加上您需要减少 的位数x(因为如果 x = 1000000,您需要另外 6 位 pi 才能在缩减域中获得足够准确的答案)。

最终,您的结果中的精度位数将少于计算的精度 - 根据上面的来源,64 位使算法的 48 次迭代的精度增加一倍(大约 2^48 精度中的 1 个) ).由于 double 的有效位数是 53 位,这实际上还算不错(在计算中使用的精度的 5 位以内)。

可以找到该算法的 Java 实现 in this earlier answer .看看它与泰勒展开式的比较会很有趣......

编辑 this paper比较 CORDIS 和泰勒展开的收敛性,并得出结论,当您在缩减域中工作时,泰勒更快(因此在将 x 带入 [0 pi/2] 之后)。它还有一个相当简洁的重新表述,绕过了很多舍入误差 - 使其比对术语的蛮力评估更准确。

关于java - 精确计算正弦和余弦函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19797951/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com