난수 발생기(직접 만든 함수)에서 일양분포 여부 검증 및 부채꼴 면적, 반지름1인 원 내부에 속하는 비율
다가
아래의 샘플프로그램을 참고하여 난수발생기(Random Number Generator)를 만들고, 이를 이용하여
1. 반지름 1인 1사분면의 부채꼴의 면적을 구한다(적분 Simulation).
2. 만들어진 난수 발생기의 일양분포(Uniform/Even Distribution) 여부를 검증한다. 구간을 1000등분하고 100만개의 난수를 발생시켜 약 1000개씩 각 구간에 속하는가 검사한다.
3. 0 r1, r2 1인 난수 쌍 r1, r2를 10000개 발생시켜 좌표 (r1, r2)가 x2 + y2 = 1인 원 내부에 속하는 비율을 구한다.
어떤의미인지.. 모르겠네요.. 일양분포를 검색해도.. 안나오구..문제가 3개인데요.. 1번과 3번은 제가 아는한 풀어봤는데, 2번은 무슨뜻인지 모르겠네요..
그리고 1번과 3번을 제대로 제가 구현한게 맞는지 답변 해주시면 정말 감사드리겠습니다!! 난수발생기를 이용해야되는데;
1번은 어떤식으로 이용해야하는건지 모르겟네요.. 3번은 . 아마 맞는듯 싶구요..ㅎ 답변 해주시면 정말 감사드리겠습니다.ㅎimport java.util.*;
public class Java_06 {
public static double sector(double radius, double cAngle){
return radius*radius*Math.PI*(cAngle/360);
}
public static double ranper(double r1, double r2){
double count=0;
for(int k=0;k10000;k++){
r1=random();
r2=random();
double ransum=(r1*r1)+(r2*r2);
if(ransum0&&ransum1){
count = count+1;
}
else
count=count-1;
}
return count/10000;
}
static final int bigPrimeNumber = 65539;
static int save;
static int seed;
static boolean firstTime = true;
public static void main(String[] args){
System.out.print(1. 반지름이 1인 1사분면의 부채꼴의 면적(각도는 임의로 60°) : );
System.out.println(sector(1,60));
seed = Integer.parseInt(args[0]);
System.out.println(2. 일양분포 여부 검증 구간을 1000등분하고 100만개의 난수 발생 약 1000개씩 각 구간에 속하는가 검사한다 : );
for (int j=0 ; j1000 ; j++ ){
for (int i =0; i 1000; i++ ){
}
}
System.out.println(0 r1, r2 1인 난수 쌍 r1, r2를 10000개 발생시켜 좌표 (r1, r2)가 x2 + y2 = 1인 원 내부에 속하는 비율 : );
double r1=0,r2=0;
System.out.println(ranper(r1,r2));
}
static double random(){
if(firstTime) {
save = seed * bigPrimeNumber;
firstTime = false;
}
else save = save * bigPrimeNumber;
if(save 0) save = ~save;
double r = save / 2147483647.0;
return r;
}
}