Calculate PI To Arbitrary Precision (Sample Java Code) Calculer IP à l'arbitraire de précision (échantillon de code de Java)
Sample Java code to calculate PI to arbitrary precision. Exemple de code Java pour le calcul IP à l'arbitraire de précision. This uses Machin’s formula: pi/4 = 4*arctan(1/5) - arctan(1/239) . Cette fonction utilise la formule de Machin: pi / 4 = 4 * arctan (1 / 5) - arctan (1 / 239).
Notes:
1. Run Pi with a positive integer precision value. Run Pi avec une précision positif. For example to calculate PI to 10 decimal places run: Par exemple, pour calculer PI à 10 décimales exécutez:
java Pi 10 Java Pi 10
2. There are other algorithms and even better ones to calculate PI too. Il existe d'autres algorithmes et même de meilleure qualité pour le calcul de PI. This is just an example. Il ne s'agit que d'un exemple. I use it to load test my server. Je l'utilise pour charger mon serveur de test.
3. Try running with 1 million (1000000) to give your server a good workout Essayez de lancer avec 1 million (1000000) pour donner à votre serveur une bonne séance d'entraînement ![]()
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 importation; public class Pi (public static void main (String args []) throws NumberFormatException (int chiffres = Integer.parseInt (args [0]); String pi = computePi (chiffres). 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 == '. ") De continuer, c -='0'; freq [c] + +;) for (int i = 0; i <10; i + +) ( System.out.println ( "" + i + "" + freq [i]);)) / ** constantes utilisées dans le calcul pi * / private static final BigDecimal = BigDecimal.valueOf QUATRE (4); / ** mode d'arrondi à utiliser au cours de calcul pi * / private static final int roundingMode = BigDecimal.ROUND_HALF_EVEN; / ** * Calculer la valeur de pi pour le nombre de * chiffres après la virgule.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.La valeur * est calculé en utilisant la formule de Machin: * * pi / 4 = 4 * arctan (1 / 5) - arctan (1 / 239) * * et d'une puissance d'extension de la série de arctan (x) * suffisamment de précision.*/ 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 chiffres) (int scale = + 5 chiffres; BigDecimal arctan1_5 = arctan (5, échelle); BigDecimal arctan1_239 = arctan (239, échelle); BigDecimal pi = arctan1_5.multiply (quatre). Soustraire ( arctan1_239). multiplier (quatre); retour pi.setScale (chiffres, BigDecimal.ROUND_HALF_UP);) / ** * Calcul de la valeur, en radians, de la arctangent de * l'inverse de l'aide à l'entier spécifié * nombre de chiffres après la virgule.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 ...* La valeur est calculée en utilisant la puissance d'extension de la série pour l'arc 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 (inverseX int, int échelle) (BigDecimal résultat, numéro, terme; BigDecimal invX = BigDecimal.valueOf (inverseX); BigDecimal invX2 = BigDecimal.valueOf (inverseX * inverseX); numéro = BigDecimal.ONE.divide (invX, l'échelle, roundingMode); result = nombreux; int i = 1; do (numéro = numer.divide (invX2, l'échelle, roundingMode); int denom = 2 * i + 1; term = numer.divide (BigDecimal.valueOf (denom), l'échelle, roundingMode); if ((i% 2)! = 0) (result = result.subtract (terme);) else (result = result.add (terme);) i + +;) while (term. compareTo (BigDecimal.ZERO)! = 0); return result;))
Note: The code has been adapted from a java.sun example. Note: Le code a été adapté d'une java.sun exemple.
Filed under Classé sous Headline News Headline News , How To Comment , Java Software Logiciel de Java , Open Source Software Open Source Software , Programming Programmation , Tech Note Note technique | |
| |
RSS 2.0 RSS 2,0 | |
Trackback this Article | cet article |
Email this Article Envoyer cet article
You may also like to read Vous mai également à lire |




