代码之家  ›  专栏  ›  技术社区  ›  kirbo

无穷级数的并行计算

  •  0
  • kirbo  · 技术社区  · 14 年前

    这只是其中一个例子: arctan(x)=x-x^3/3+x^5/5-x^7/7+。。。。

    假设您有一个允许您处理大数的库,那么第一个明显的解决方案是开始对序列中的每个元素进行加减运算,直到达到某个目标N。

    您还可以预先保存X^n,因此对于每个下一个元素,而不是计算X^(n+2),您可以执行lastX*(X^2)

    谢谢!

    编辑: 我需要计算10万到100万次迭代。这是基于c++的应用程序,但我正在寻找抽象的解决方案,所以这不重要。

    3 回复  |  直到 14 年前
        1
  •  7
  •   Mark Ransom    14 年前

    P、 在大多数情况下,当遇到这样的问题时,寻找一种更有效的计算结果的方法是值得的。在大多数情况下,更好的算法比更多的马力要好。

        2
  •  2
  •   comingstorm    14 年前

    如果你想计算出π到数百万个地方的值,你首先要密切注意选择一个收敛速度快、易于并行化的级数。然后,如果您有足够的数字,那么将它们拆分到多个处理器上最终会变得经济高效;您必须找到或编写一个bignum库来完成这项工作。

    atan(x)= x - x^3/3 + x^5/5 - x^7/7 + x^9/9 ...
           = x*(1 - x^2*(1/3 - x^2*(1/5 - x^2*(1/7 - x^2*(1/9 ...
    

           = x*(1-x^2/3) + x^3*(1/5-x^2/7) + x^5*(1/9 ...
           = x*( (1-x^2/3) + x^2*((1/5-x^2/7) + x^2*(1/9 ...
           = [yet more recursive computation...]
    

        3
  •  1
  •   High Performance Mark    14 年前

    好吧,在这个例子中,你可以对这个级数求和(如果括号放在正确的位置):

    (-1)^i * (x^(2i + 1))/(2i + 1)
    

    然后在处理器1/8上计算i=1,9,17,25。。。

    我怀疑,在这个例子中,并行是否值得,我怀疑当并行线程仍然处于唤醒状态时,您在1个处理器上的精度会达到双倍;但这只是对这个例子的一个猜测,您可能可以使用许多值得并行化的级数。