Calculate PI To Arbitrary Precision (Sample Java Code) Рассчитать PI произвольному Precision (Sample Java code)
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 пример.
Filed under Поданного в соответствии с Headline News Headline News , How To Как , Java Software Программное обеспечение Java , Open Source Software Open Source Software , Programming Программирование , Tech Note Технология Примечание | |
| |
RSS 2.0 RSS 2,0 | |
Trackback this Article | это статья |
Email this Article Отослать Статья
You may also like to read Вы можете также люблю читать |




