Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.concurrent.ThreadLocalRandom;
- public class MonteCarlo {
- public static void main(String[] args) {
- List<Integer> numberOfSamplesList = convertParametersForNumberOfSamplesList(args);
- for (Integer numberOfSamples : numberOfSamplesList) {
- int numberOfPointsInCircle = computeApproximation(numberOfSamples);
- printResult(numberOfSamples, numberOfPointsInCircle);
- }
- }
- private static int computeApproximation(Integer numberOfSamples) {
- int numberOfPointsInCircle = 0;
- for (int i = 0; i < numberOfSamples; i++) {
- double x = ThreadLocalRandom.current().nextDouble(0, 1.0);
- double y = ThreadLocalRandom.current().nextDouble(0, 1.0);
- if (getDistanceFromPoint00(x, y) <= 1) {
- numberOfPointsInCircle++;
- }
- }
- return numberOfPointsInCircle;
- }
- private static double getDistanceFromPoint00(double x, double y) {
- return Math.sqrt(x * x + y * y);
- }
- private static void printResult(Integer numberOfSamples, int numberOfPointsInCircle) {
- double pi = 4 * (numberOfPointsInCircle / (double) numberOfSamples);
- System.out.println("----------------------");
- System.out.println("Liczba prob: " + numberOfSamples);
- System.out.println("Przyblizenie PI: " + String.format("%21.20f",pi));
- double relativeError = Math.abs((Math.PI - pi) / Math.PI);
- double absoluteError = Math.abs(Math.PI - pi);
- System.out.println("Blad wzgledny: " + String.format("%21.20f", relativeError));
- System.out.println("Blad bezwzgledny: " + String.format("%21.20f", absoluteError));
- System.out.println("----------------------");
- }
- private static List<Integer> convertParametersForNumberOfSamplesList(String[] args) {
- List<Integer> numberOfSamplesList = new ArrayList<>();
- try {
- for (String arg : args) {
- int number = Integer.parseInt(arg);
- if (number < 1) {
- throw new NumberFormatException();
- }
- numberOfSamplesList.add(number);
- }
- if (numberOfSamplesList.isEmpty()) {
- throw new IllegalArgumentException();
- }
- } catch (NumberFormatException e) {
- System.out.println("Zly format liczby(powinna byc to liczba naturalna wieksza od zera");
- } catch (IllegalArgumentException e) {
- System.out.println("Brak parametrow uruchomienia");
- }
- return numberOfSamplesList;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement