Source : https://www.hackerrank.com/challenges/s10-normal-distribution-1
Objective
In this challenge, we learn about normal distributions. Check out the Tutorial tab for learning materials!
Task
In a certain plant, the time taken to assemble a car is a random variable, , having a normal distribution with a mean of hours and a standard deviation of hours. What is the probability that a car can be assembled at this plant in:
- Less than hours?
- Between and hours?
Input Format
There are lines of input (shown below):
20 219.520 22
The first line contains space-separated values denoting the respective mean and standard deviation for . The second line contains the number associated with question . The third line contains space-separated values describing the respective lower and upper range boundaries for question .
If you do not wish to read this information from stdin, you can hard-code it into your program.
Output Format
There are two lines of output. Your answers must be rounded to a scale of decimal places (i.e., format):
- On the first line, print the answer to question (i.e., the probability that a car can be assembled in less than hours).
- On the second line, print the answer to question (i.e., the probability that a car can be assembled in between to hours).
Source : https://www.hackerrank.com/challenges/s10-normal-distribution-1
Solution
// github.com/RodneyShag | |
public class Solution { | |
public static void main(String[] args) { | |
double mean = 20; | |
double std = 2; | |
System.out.format("%.3f%n", cumulative(mean, std, 19.5)); | |
System.out.format("%.3f%n", cumulative(mean, std, 22) - cumulative(mean, std, 20)); | |
} | |
/* Calculates cumulative probability */ | |
public static double cumulative(double mean, double std, double x) { | |
double parameter = (x - mean) / (std * Math.sqrt(2)); | |
return (0.5) * (1 + erf(parameter)); | |
} | |
/* Source: http://introcs.cs.princeton.edu/java/21function/ErrorFunction.java.html */ | |
// fractional error in math formula less than 1.2 * 10 ^ -7. | |
// although subject to catastrophic cancellation when z in very close to 0 | |
// from Chebyshev fitting formula for erf(z) from Numerical Recipes, 6.2 | |
public static double erf(double z) { | |
double t = 1.0 / (1.0 + 0.5 * Math.abs(z)); | |
// use Horner's method | |
double ans = 1 - t * Math.exp( -z*z - 1.26551223 + | |
t * ( 1.00002368 + | |
t * ( 0.37409196 + | |
t * ( 0.09678418 + | |
t * (-0.18628806 + | |
t * ( 0.27886807 + | |
t * (-1.13520398 + | |
t * ( 1.48851587 + | |
t * (-0.82215223 + | |
t * ( 0.17087277)))))))))); | |
if (z >= 0) return ans; | |
else return -ans; | |
} | |
} |
No comments:
Post a Comment