Sample Java code to calculate PI to arbitrary precision. Примеры кода Java для расчета PI произвольно точности. This uses Machin’s formula: pi/4 = 4*arctan(1/5) - arctan(1/239) . Здесь используется Мейчин формула: П. И. / 4 = 4 * arctan (1 / 5) - arctan (1 / 239).

Notes: Примечания:
1. Run Pi with a positive integer precision value. Запуск Пи с точностью положительное целое значение. For example to calculate PI to 10 decimal places run: Например для расчета PI до 10 знаков после запятой выполните:
java Pi 10 java Pi 10
2. There are other algorithms and even better ones to calculate PI too. Есть и другие алгоритмы, и даже лучше так, чтобы можно вычислить ИП тоже. This is just an example. Это просто пример. I use it to load test my server. Я использую его для загрузки протестировать свои сервера.
3. Try running with 1 million (1000000) to give your server a good workout Попробуйте выполнить с 1 млн (1000000) дать свой сервер хорошей тренировки :)

 import java.math.BigDecimal;  public class Pi {     public static void main(String args[]) throws NumberFormatException {         int digits = Integer.parseInt(args[0]);         String pi = computePi(digits).toString();         int freq[] = new int[10];         for(int i = 0;i < 10;i++) freq[i] = 0;         int c;         for(int i = 0;i < pi.length();i++) {             c = pi.charAt(i);             if(c == '.') continue;             c -= '0';             freq[c]++;         }         for(int i = 0;i < 10;i++) {             System.out.println("" + i + " " + freq[i]);         }     }     /** constants used in pi computation */     private static final BigDecimal FOUR = BigDecimal.valueOf(4);      /** rounding mode to use during pi computation */     private static final int roundingMode = BigDecimal.ROUND_HALF_EVEN;      /**      * Compute the value of pi to the specified number of      * digits after the decimal point. импорт java.math.BigDecimal; общественного класса Pi (государственной статической силы основных (String args []) броски NumberFormatException (int цифр = Integer.parseInt (args [0]); String pi = computePi (цифры). toString (); int частота [] = новый int [10], ибо (я int = 0; я <10; я + +) частота [я] = 0; int с; для (int я = 0; я <pi.length (); я + +) (С = pi.charAt (я), если (с == ".") По-прежнему; с -='0 '; частота [с] + +;) за (int я = 0; я <10; я + +) ( System.out.println ( "" я + + "" + частота [я]);)) / ** констант, используемых в расчете pi * / частный статический окончательного BigDecimal ЧЕТЫРЕХ = BigDecimal.valueOf (4); / ** округления режиме для использования в ходе вычислений pi * / частный статический окончательного int roundingMode = BigDecimal.ROUND_HALF_EVEN; / ** * компьют стоимости П.И. на указанное число * цифр после запятой. The value is      * computed using Machin's formula:      *      *          pi/4 = 4*arctan(1/5) - arctan(1/239)      *      * and a power series expansion of arctan(x) to      * sufficient precision. * Стоимость вычисляется с помощью Мейчин формула: * * pi / 4 = 4 * arctan (1 / 5) - arctan (1 / 239) * * и мощности серии расширение arctan (х) в * достаточно точно. */     public static BigDecimal computePi(int digits) {         int scale = digits + 5;         BigDecimal arctan1_5 = arctan(5, scale);         BigDecimal arctan1_239 = arctan(239, scale);         BigDecimal pi = arctan1_5.multiply(FOUR).subtract(                                   arctan1_239).multiply(FOUR);         return pi.setScale(digits,                            BigDecimal.ROUND_HALF_UP);     }     /**      * Compute the value, in radians, of the arctangent of      * the inverse of the supplied integer to the specified      * number of digits after the decimal point. * / Государственного статического BigDecimal computePi (int цифр) (int масштаб цифр = + 5; BigDecimal arctan1_5 = arctan (5, масштаб); BigDecimal arctan1_239 = arctan (239, масштаб); BigDecimal pi = arctan1_5.multiply (четырех). Вычитать ( arctan1_239). размножаются (ЧЕТЫРЕ); вернуться pi.setScale (цифры, BigDecimal.ROUND_HALF_UP);) / ** * компьют ценность, в радианах, из arctangent * от обратной поставки целое, указанный * количество цифр после запятой. The value      * is computed using the power series expansion for the      * arc tangent:      *      * arctan(x) = x - (x^3)/3 + (x^5)/5 - (x^7)/7 +      *     (x^9)/9 ... * Стоимость вычисляется с помощью степенными рядами расширения для дуговых касательной *: * * arctan (х) = х - (х ^ 3) / 3 + (х ^ 5) / 5 - (х ^ 7) / 7 + * (х ^ 9) / 9 ... */     public static BigDecimal arctan(int inverseX,                                     int scale)     {         BigDecimal result, numer, term;         BigDecimal invX = BigDecimal.valueOf(inverseX);         BigDecimal invX2 =             BigDecimal.valueOf(inverseX * inverseX);          numer = BigDecimal.ONE.divide(invX,                                       scale, roundingMode);          result = numer;         int i = 1;         do {             numer =                 numer.divide(invX2, scale, roundingMode);             int denom = 2 * i + 1;             term =                 numer.divide(BigDecimal.valueOf(denom),                              scale, roundingMode);             if ((i % 2) != 0) {                 result = result.subtract(term);             } else {                 result = result.add(term);             }             i++;         } while (term.compareTo(BigDecimal.ZERO) != 0);         return result;     } } * / Государственного статического BigDecimal arctan (int inverseX, int масштаб) (BigDecimal результате numer, срок полномочий; BigDecimal invX = BigDecimal.valueOf (inverseX); BigDecimal invX2 = BigDecimal.valueOf (inverseX * inverseX); numer = BigDecimal.ONE.divide (invX, масштаб, roundingMode); результат = numer; int я = 1; делать numer = (numer.divide (invX2, масштаб, roundingMode); int denom = 2 * я + 1; срок = numer.divide (BigDecimal.valueOf (denom), масштаб, roundingMode), если ((я% 2)! = 0) (результатом result.subtract = (условие);) (другой результат = result.add (условие);) я + +;) а (term. compareTo (BigDecimal.ZERO)! = 0); возвращения результата;)) 

Note: The code has been adapted from a java.sun example. Примечание: Этот код был адаптирован из java.sun пример.