Есть ли более эффективный способ вычисления числа пи?

Вчера начал изучать Java. Поскольку я знаю другие языки программирования, мне легче изучать Java. Это довольно круто, на самом деле. Я все еще предпочитаю Python :) Как бы то ни было, я написал эту программу для вычисления числа пи на основе алгоритма (пи = 4/1 - 4/3 + 4/5 - 4/7....), и я знаю, что есть более эффективные способы вычисления пи. Как мне это сделать?

import java.util.Scanner;

public class PiCalculator
{
  public static void main(String[] args)
  {
    int calc;
    Scanner in = new Scanner(System.in);
    System.out.println("Welcome to Ori's Pi Calculator Program!");
    System.out.println("Enter the number of calculations you would like to perform:");
    calc = in.nextInt();
    while (calc <= 0){
      System.out.println("Your number cannot be 0 or below. Try another number.");
      calc = in.nextInt();
    }
    float a = 1;
    float pi = 0;
    while (calc >= 0) {
      pi = pi + (4/a);
      a = a + 2;
      calc = calc - 1;
      pi = pi - (4/a);
      a = a + 2;
      calc = calc - 1;
    }
    System.out.println("Awesome! Pi is " + pi);
  }
}

Результат этого кода после 1 000 000 вычислений по-прежнему равен 3,1415954. ДОЛЖЕН быть более эффективный способ сделать это.

Спасибо!


person Ori Yonay    schedule 20.08.2015    source источник
comment
возможный дубликат Как определить, является ли мой расчет числа пи точно?   -  person sinclair    schedule 20.08.2015
comment
вы пробовали серию Nilacantha?   -  person jhamon    schedule 20.08.2015
comment
да... да, есть.   -  person Tawcharowsky    schedule 20.08.2015
comment
@BrianAgnew этот вопрос плохо подходит для программистов - он будет быстро отклонен и закрыт там, см. meta.programmers.stackexchange.com/questions/6483/ Рекомендуемое чтение: Что происходит на Programmers.SE? Руководство по переполнению стека   -  person gnat    schedule 20.08.2015
comment
Мне не хватает компонента Java в этом вопросе. Да, он написан на Java, но он полностью посвящен вычислению PI. Вы можете перевести этот код на Python, и вопрос останется без изменений.   -  person Gimby    schedule 20.08.2015
comment
Вы используете float для каждого термина, тем самым накапливая ошибки округления. Это не даст вам точного результата.   -  person Alex Salauyou    schedule 20.08.2015


Ответы (1)


Самый эффективный способ вычислить число Пи в Java — вообще не вычислять его:

System.out.println("Awesome! Pi is " + Math.PI);

Хотя ваш вопрос не ясен по этому поводу, я предполагаю, что вы на самом деле пытаетесь выполнить упражнение. В этом случае вы можете попробовать серию Nilacantha:

float pi = 3;
for(int i = 0; i < 1000000; i += 2) {
    pi += 4 / (float) (i * (i + 1) * (i + 2));
}

Еще более эффективной и точной является формула Мачина:

float pi = 4f * (4f * Math.atan(5) - Math.atan(239)) / 5f;
person L3R5    schedule 20.08.2015