使用Java多线程计算常数e

时间:2015-05-25 14:14:06

标签: java multithreading

我正在尝试使用线程以尽可能少的时间为我的作业计算 e ,因为用户将传递一个带有线程数量的变量这将用于计算,但我不能使我的多线程正常工作以实现某种结果。我被告知一个好的计算方法是使用以下数学表达式: e = sum((3-4k ^ 2)/((2k + 1)!)),其中 k =(0;无穷大)。但到目前为止,我只得到了这个基本方法:

public class MainClass {
    public static long fact(int x) {
        long p = 1;
        for (int i = 1; i <= x; i++)
            p = p * i;
        return p;
    }

    public static void main(String[] args) {
        double e = 1;
        for (int i = 1; i < 50; i++)
            e = e + 1 / (double) (fact(i));
        System.out.print("e = " + e);
    }
}

1 个答案:

答案 0 :(得分:1)

你可以使用Java 8 parrallel Streams比创建线程更容易,更不容易出错。

import org.apache.commons.math.util.MathUtils;

...

public static double computeE(){
    return IntStream.iterate(0,k->k+1)
                    .limit(100000)
                    .mapToDouble(k->(3-4*k*k)/MathUtils.factorialDouble(2*k+1))
                    .parallel()
                    .sum();
}

在我的机器上,它使用两个核心并找到e = 2.718281828459045进行10000次迭代,这是每个数字都正确的值。