LeibnizMethod не работает при многопоточности с четным числом потоков - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть вопрос о методе Лейбница, который вычисляет число пи. Следующий код показывает мои вычисления метода (не волнуйтесь, результат всех потоков умножается на 4 в конце). Когда я работаю с одним потоком, все идет хорошо. Когда я работаю с нечетным количеством потоков, все идет хорошо. Но когда я работаю с четным числом потоков, число пи не сходится должным образом. Изображение метода Лейбница

    public void run() {

    BigDecimal counter = new BigDecimal(getThreadNumber());

    BigDecimal counterIncrease = new BigDecimal(getNumberOfAllThreads());

    while( !isInterrupted() )  {
        // value = value + ( -1^counter / ( 2 * counter + 1)
        this.value = this.value.add( (new BigDecimal(-1).pow(counter.intValue())).divide( counter.multiply(new BigDecimal(2)).add(BigDecimal.ONE), 1000, RoundingMode.HALF_UP) );
        // increase counter by the number of all threads
        counter = counter.add(counterIncrease);

        setThreadResult(this.value);
        internalSteps++;
    }

}

Кто-нибудь знает об этой проблеме?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...