Calculate PI To Arbitrary Precision (Sample Java Code) Per calcolare pi precisione arbitraria (campione di codice Java)
Sample Java code to calculate PI to arbitrary precision. Esempi di codice Java per calcolare PI a precisione arbitraria. This uses Machin’s formula: pi/4 = 4*arctan(1/5) - arctan(1/239) . Machin questo utilizza la formula: pi / 4 = 4 * arctan (1 / 5) - arctan (1 / 239).
Notes: Note:
1. Run Pi with a positive integer precision value. Pi eseguire con un numero intero positivo valore di precisione. For example to calculate PI to 10 decimal places run: Per esempio per calcolare PI a 10 decimale eseguire:
java Pi 10 Java Pi 10
2. There are other algorithms and even better ones to calculate PI too. Ci sono altri algoritmi e anche di migliori per calcolare PI troppo. This is just an example. Questo è solo un esempio. I use it to load test my server. Lo uso per caricare il mio server di prova.
3. Try running with 1 million (1000000) to give your server a good workout Si provi ad eseguire con 1 milione (1000000) per dare il tuo server un buon allenamento ![]()
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.importazione java.math.BigDecimal; classe pubblica Pi (public static void main (String args []) getta NumberFormatException (int cifre = Integer.parseInt (args [0]); String pi = computePi (cifre). 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]);)) / ** costanti utilizzato in pi di calcolo * / privato statica finale BigDecimal QUATTRO = BigDecimal.valueOf (4); / ** la modalità di arrotondamento di utilizzare nel corso di calcolo pi * / private static int finale roundingMode = BigDecimal.ROUND_HALF_EVEN; / ** * Calcola il valore di pi greco al numero specifico di * cifre dopo la virgola.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.Il valore è * Machin calcolata utilizzando la formula: * * pi / 4 = 4 * arctan (1 / 5) - arctan (1 / 239) * * e una serie di potenze di espansione di arctan (x) * sufficiente precisione.*/ 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 cifre) (int scala = + 5 cifre; BigDecimal arctan1_5 = arctan (5, scala); BigDecimal arctan1_239 = arctan (239, scala); BigDecimal pi = arctan1_5.multiply (quattro). Sottrarre ( arctan1_239). moltiplicare (quattro); ritorno pi.setScale (cifre, BigDecimal.ROUND_HALF_UP);) / ** * Calcola il valore, in radianti, del Arcotangente di * l'inverso della fornite a intero * specificato il numero di cifre dopo la virgola.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 ...* Il valore è calcolato utilizzando la serie di potenze di espansione per l'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 scala) (BigDecimal risultato, numero, termine; BigDecimal invX = BigDecimal.valueOf (inverseX); BigDecimal invX2 = BigDecimal.valueOf (inverseX * inverseX); numero = BigDecimal.ONE.divide (invX, scala, roundingMode); risultato = numero; int i = 1; do (numero = numer.divide (invX2, scala, roundingMode); int DENOM = 2 * i + 1; termine = numer.divide (BigDecimal.valueOf (DENOM), scala, roundingMode); if ((i% 2)! = 0) (risultato = result.subtract (termine);) else (risultato = result.add (termine);) i + +;) while (term. compareTo (BigDecimal.ZERO)! = 0); return result;))
Note: The code has been adapted from a java.sun example. Nota: Il codice è stato adattato da un java.sun esempio.
Filed under Elencato sotto Headline News Headline News , How To Come , Java Software Software Java , Open Source Software Software open source , Programming Programmazione , Tech Note Nota tech | |
| |
RSS 2.0 RSS 2,0 | |
Trackback this Article | questo articolo |
Email this Article Invia questo articolo
You may also like to read Si può anche leggere come |




