Flo*_*ris 11
泰勒展开(或更恰当地说,Maclauren展开,即泰勒关于x = 0)不是进行此计算的好方法.大多数计算机使用CORDIC算法 - 它具有在有限数量的迭代中收敛到任意精度的优点,并且只需要非常简单的数学运算.
另外要记住的是:你真的想以一种准确的方式开始将参数减少x到[0 pi/2]的范围内,使用简单的逻辑来处理答案的符号.当x变大时,Maclauren(泰勒)扩展将振荡很长一段时间.
这意味着,除了其他方面之外,您需要知道pi至少所需答案的位数的值,再加上需要减少多少位数x(因为如果x = 1000000,则需要另外6位数的pi只是为了在缩小的域中获得足够准确的答案).
最终,您的结果精度数字将低于计算精度 - 根据上面的来源,64位双精度数字会增加48次迭代算法的精度(大约1 ^ 2 ^ 48精度).由于double的有效位数是53位,所以实际上并不太糟糕(在计算中使用的精度的5位内).
在此前面的答案中可以找到该算法的java实现.看看它与泰勒扩张的比较会很有趣......
编辑 本文比较了CORDIS与泰勒扩展的收敛性,并得出结论,当你在缩减域中工作时泰勒更快(所以在将x带入[0 pi/2]之后).它还有一个相当简洁的重新制定,可以解决许多舍入误差 - 使其比对条款的蛮力评估更准确.
你可以使用sin和cos的泰勒级数展开来计算它们的任意精度:

