Calculate PI To Arbitrary Precision (Sample Java Code) Para calcular pi precisión arbitraria (muestra del código de Java)
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.
Filed under Filed under Headline News Headline News , How To Cómo , Java Software El software de Java , Open Source Software Open Source Software , Programming Programación , Tech Note Nota técnica | |
| |
RSS 2.0 RSS 2,0 | |
Trackback this Article | este artículo |
Email this Article Enviar artículo
You may also like to read También puede leer |




