У меня есть вопрос о методе Лейбница, который вычисляет число пи. Следующий код показывает мои вычисления метода (не волнуйтесь, результат всех потоков умножается на 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++;
}
}
Кто-нибудь знает об этой проблеме?