Sample Java code to calculate PI to arbitrary precision. Ejemplo de código Java para calcular PI a precisión arbitraria. This uses Machin’s formula: pi/4 = 4*arctan(1/5) - arctan(1/239) . Este utiliza la fórmula de Machin: pi / 4 = 4 * arctan (1 / 5) - arctan (1 / 239).

Notes: Notas:
1. Run Pi with a positive integer precision value. Ejecutar Pi con un número entero positivo precisión valor. For example to calculate PI to 10 decimal places run: Por ejemplo, para calcular PI al 10 decimal ejecutar:
java Pi 10 Java Pi 10
2. There are other algorithms and even better ones to calculate PI too. Hay otros algoritmos e incluso mejores para el cálculo de PI. This is just an example. Esto es solo un ejemplo. I use it to load test my server. Yo lo uso para mi prueba de carga del servidor.
3. Try running with 1 million (1000000) to give your server a good workout Intente correr con 1 millón (1000000) para darle a su servidor de una buena sesión de ejercicios :)

 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. importación java.math.BigDecimal; público de clase Pi (public static void main (String args []) lanza NumberFormatException (int dígitos = Integer.parseInt (args [0]); String pi = computePi (dígitos). 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 == '. ") Siguen c -='0'; freq [c] + +;) for (int i = 0; i <10; i + +) ( System.out.println ( "" + i + "" + freq [i]);)) / ** constantes utilizados en el cálculo pi * / static final privado BigDecimal = BigDecimal.valueOf CUATRO (4); / ** modo de redondeo para su uso durante el cómputo pi * / static final privado int roundingMode = BigDecimal.ROUND_HALF_EVEN; / ** * Calcular el valor de pi a un número especificado de * dígitos después del punto decimal. 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. El valor es calculado * utilizando la fórmula de Machin: * * pi / 4 = 4 * arctan (1 / 5) - arctan (1 / 239) * * y una serie de potencias de expansión arctan (x) * a la suficiente precisión. */     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. * / Public static BigDecimal computePi (int dígitos) (int escala = + 5 dígitos; BigDecimal arctan1_5 = arctan (5, escala); BigDecimal arctan1_239 = arctan (239, escala); BigDecimal pi = arctan1_5.multiply (CUATRO). Restar ( arctan1_239). multiplicar (cuatro); regreso pi.setScale (dígitos, BigDecimal.ROUND_HALF_UP);) / ** * Calcular el valor, en radianes, de la arctangent de * la inversa de la suministrado entero a la especificada * número de dígitos después del punto decimal. 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 ... * El valor se calcula utilizando la serie de potencias de expansión para el arco tangente * * * arctan (x) = x - (x ^ 3) / 3 + (x ^ 5) / 5 - (x ^ 7) / 7 + * (x ^ 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;     } } * / Public static BigDecimal arctan (int inverseX, int escala) (BigDecimal resultado, numer, plazo; BigDecimal invX = BigDecimal.valueOf (inverseX); BigDecimal invX2 = BigDecimal.valueOf (inverseX * inverseX); numer = BigDecimal.ONE.divide (invX, escala, roundingMode); resultado = numer; int i = 1; hacer numer = (numer.divide (invX2, escala, roundingMode); int denom = 2 * i + 1; plazo = numer.divide (BigDecimal.valueOf (denom), escala, roundingMode); if ((i% 2!) = 0) (resultado = result.subtract (plazo);) else (resultado = result.add (plazo);) i + +;) while (term. compareTo (BigDecimal.ZERO!) = 0); regreso resultado;)) 

Note: The code has been adapted from a java.sun example. Nota: El código ha sido adaptado a partir de una java.sun ejemplo.