Advertisement
Guest User

MonteCarlo

a guest
Nov 15th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.68 KB | None | 0 0
  1. package com.company;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.concurrent.ThreadLocalRandom;
  6.  
  7. public class MonteCarlo {
  8.  
  9. public static void main(String[] args) {
  10. List<Integer> numberOfSamplesList = convertParametersForNumberOfSamplesList(args);
  11. for (Integer numberOfSamples : numberOfSamplesList) {
  12. int numberOfPointsInCircle = computeApproximation(numberOfSamples);
  13. printResult(numberOfSamples, numberOfPointsInCircle);
  14. }
  15. }
  16.  
  17. private static int computeApproximation(Integer numberOfSamples) {
  18. int numberOfPointsInCircle = 0;
  19. for (int i = 0; i < numberOfSamples; i++) {
  20. double x = ThreadLocalRandom.current().nextDouble(0, 1.0);
  21. double y = ThreadLocalRandom.current().nextDouble(0, 1.0);
  22. if (getDistanceFromPoint00(x, y) <= 1) {
  23. numberOfPointsInCircle++;
  24. }
  25. }
  26. return numberOfPointsInCircle;
  27. }
  28.  
  29. private static double getDistanceFromPoint00(double x, double y) {
  30. return Math.sqrt(x * x + y * y);
  31. }
  32.  
  33. private static void printResult(Integer numberOfSamples, int numberOfPointsInCircle) {
  34. double pi = 4 * (numberOfPointsInCircle / (double) numberOfSamples);
  35. System.out.println("----------------------");
  36. System.out.println("Liczba prob: " + numberOfSamples);
  37. System.out.println("Przyblizenie PI: " + String.format("%21.20f",pi));
  38. double relativeError = Math.abs((Math.PI - pi) / Math.PI);
  39. double absoluteError = Math.abs(Math.PI - pi);
  40. System.out.println("Blad wzgledny: " + String.format("%21.20f", relativeError));
  41. System.out.println("Blad bezwzgledny: " + String.format("%21.20f", absoluteError));
  42. System.out.println("----------------------");
  43. }
  44.  
  45. private static List<Integer> convertParametersForNumberOfSamplesList(String[] args) {
  46. List<Integer> numberOfSamplesList = new ArrayList<>();
  47. try {
  48. for (String arg : args) {
  49. int number = Integer.parseInt(arg);
  50. if (number < 1) {
  51. throw new NumberFormatException();
  52. }
  53. numberOfSamplesList.add(number);
  54. }
  55. if (numberOfSamplesList.isEmpty()) {
  56. throw new IllegalArgumentException();
  57. }
  58. } catch (NumberFormatException e) {
  59. System.out.println("Zly format liczby(powinna byc to liczba naturalna wieksza od zera");
  60. } catch (IllegalArgumentException e) {
  61. System.out.println("Brak parametrow uruchomienia");
  62. }
  63. return numberOfSamplesList;
  64. }
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement