From 49355f8f548b9b4789d509ec2aa21ed42f6e8a8b Mon Sep 17 00:00:00 2001 From: yenru0 Date: Sun, 9 Nov 2025 17:36:29 +0900 Subject: [PATCH] add for hw4 --- hws/hw4/README.md | 6 + hws/hw4/REPORT.md | 10 + hws/hw4/main.c | 62 ++++ hws/hw4/output.txt | 848 +++++++++++++++++++++++++++++++++++++++++++++ hws/hw4/rng.c | 69 ++++ hws/hw4/rng.h | 15 + hws/hw4/rngutil.c | 90 +++++ hws/hw4/rngutil.h | 17 + 8 files changed, 1117 insertions(+) create mode 100644 hws/hw4/README.md create mode 100644 hws/hw4/REPORT.md create mode 100644 hws/hw4/main.c create mode 100644 hws/hw4/output.txt create mode 100644 hws/hw4/rng.c create mode 100644 hws/hw4/rng.h create mode 100644 hws/hw4/rngutil.c create mode 100644 hws/hw4/rngutil.h diff --git a/hws/hw4/README.md b/hws/hw4/README.md new file mode 100644 index 0000000..d9d7cc7 --- /dev/null +++ b/hws/hw4/README.md @@ -0,0 +1,6 @@ +# Numerical Analysis Homework 4 + +`REPORT.md`가 보고서입니다. +`output.txt`는 콘솔 출력으로 `main.c`의 출력결과입니다. + +`main.c`는 `rng.c`, `rngutil.c`와 같이 컴파일해야합니다. \ No newline at end of file diff --git a/hws/hw4/REPORT.md b/hws/hw4/REPORT.md new file mode 100644 index 0000000..894407b --- /dev/null +++ b/hws/hw4/REPORT.md @@ -0,0 +1,10 @@ +# Numerical Analysis Homework 3 Report + +각 샘플 크기 (100, 1000, 10000, 100000)에 대해서 난수 생성을 하여 만든 샘플에 대해서 히스토그램을 그렸습니다. 그린 히스토그램은 `output.txt`에 있습니다. + +난수 생성을 할 때 만든 난수 생성기는 Linear Congruential Generator로 만들었고 소스코드는 `rng.c`에 있습니다. + +샘플 크기가 작을때(100)는 에서는 제대로된 샘플의 형상을 보기 힘들었고 +샘플 크기가 커짐에 따라 형상이 제대로 보이기 시작했습니다. +1000일때에는 유니폼 난수에서 노이즈가 많이 있어서 예상과 달리 평탄하지 못했고, 마찬가지로 가우시안에서도 노이즈가 많은 느낌이었습니다. +10000이후부터는 예상과 거의 맞아 떨어졌고, 형상이 제대로 보였습니다. (평탄한 직선, 종모양). \ No newline at end of file diff --git a/hws/hw4/main.c b/hws/hw4/main.c new file mode 100644 index 0000000..9cd67c6 --- /dev/null +++ b/hws/hw4/main.c @@ -0,0 +1,62 @@ +#include +#include + +#include "rng.h" +#include "rngutil.h" + +int cmp(const void *a, const void *b) { + float af = *(float *) a; + float bf = *(float *) b; + + if (bf - af > 0) { + return -1; + } else if (bf - af < 0) { + return 1; + } else { + return 0; + } +} + +int main() { + rng *base = get_rng(8); + + const size_t n_ns = 4; + size_t ns[] = {100, 1000, 10000, 100000}; + float **samples = calloc(n_ns * 2, sizeof(float *)); + + size_t i, j; + for (i = 0; i < n_ns; i++) { + samples[i * 2] = calloc(ns[i], sizeof(float)); + samples[i * 2 + 1] = calloc(ns[i], sizeof(float)); + for (j = 0; j < ns[i]; j++) { + samples[i * 2][j] = rng_uniform(base, -3, 4); + samples[i * 2 + 1][j] = rng_gaussian(base, 0.5, 1.5); + } + qsort(samples[i * 2], ns[i], sizeof(float), cmp); + qsort(samples[i * 2 + 1], ns[i], sizeof(float), cmp); + } + + Interval *interval1 = new_interval(100); + Interval *interval2 = new_interval(100); + for (i = 0; i < n_ns; i++) { + intervalizing(interval1, ns[i], samples[i * 2]); + intervalizing(interval2, ns[i], samples[i * 2 + 1]); + printf("=== Uniform Distribution #%lu\n", i); + print_histogram(interval1, ns[i], samples[i * 2]); + printf("=== Gaussian Distribution #%lu\n", i); + print_histogram(interval2, ns[i], samples[i * 2 + 1]); + } + + for (j = 0; j < n_ns * 2; j++) { + free(samples[j]); + } + + free(samples); + + free_interval(interval1); + free_interval(interval2); + + free_rng(base); + base = NULL; + return 0; +} \ No newline at end of file diff --git a/hws/hw4/output.txt b/hws/hw4/output.txt new file mode 100644 index 0000000..08a60fc --- /dev/null +++ b/hws/hw4/output.txt @@ -0,0 +1,848 @@ +=== Uniform Distribution #0 +------------------------------------------------------ +# Histogram (n_samples: 100, avg_bin: 1.00) # +# (scale ref.: 4.00 count = 80 stars) # +# min: -2.98, max: 3.99 +Bin 0: [ 1]( 1.00%) | ******************** +Bin 1: [ 1]( 1.00%) | ******************** +Bin 2: [ 2]( 2.00%) | **************************************** +Bin 3: [ 2]( 2.00%) | **************************************** +Bin 4: [ 0]( 0.00%) | +Bin 5: [ 1]( 1.00%) | ******************** +Bin 6: [ 1]( 1.00%) | ******************** +Bin 7: [ 1]( 1.00%) | ******************** +Bin 8: [ 1]( 1.00%) | ******************** +Bin 9: [ 2]( 2.00%) | **************************************** +Bin 10: [ 0]( 0.00%) | +Bin 11: [ 1]( 1.00%) | ******************** +Bin 12: [ 0]( 0.00%) | +Bin 13: [ 2]( 2.00%) | **************************************** +Bin 14: [ 0]( 0.00%) | +Bin 15: [ 3]( 3.00%) | ************************************************************ +Bin 16: [ 3]( 3.00%) | ************************************************************ +Bin 17: [ 1]( 1.00%) | ******************** +Bin 18: [ 0]( 0.00%) | +Bin 19: [ 2]( 2.00%) | **************************************** +Bin 20: [ 0]( 0.00%) | +Bin 21: [ 0]( 0.00%) | +Bin 22: [ 1]( 1.00%) | ******************** +Bin 23: [ 0]( 0.00%) | +Bin 24: [ 1]( 1.00%) | ******************** +Bin 25: [ 0]( 0.00%) | +Bin 26: [ 0]( 0.00%) | +Bin 27: [ 2]( 2.00%) | **************************************** +Bin 28: [ 1]( 1.00%) | ******************** +Bin 29: [ 0]( 0.00%) | +Bin 30: [ 1]( 1.00%) | ******************** +Bin 31: [ 1]( 1.00%) | ******************** +Bin 32: [ 2]( 2.00%) | **************************************** +Bin 33: [ 2]( 2.00%) | **************************************** +Bin 34: [ 0]( 0.00%) | +Bin 35: [ 1]( 1.00%) | ******************** +Bin 36: [ 1]( 1.00%) | ******************** +Bin 37: [ 1]( 1.00%) | ******************** +Bin 38: [ 1]( 1.00%) | ******************** +Bin 39: [ 1]( 1.00%) | ******************** +Bin 40: [ 3]( 3.00%) | ************************************************************ +Bin 41: [ 1]( 1.00%) | ******************** +Bin 42: [ 0]( 0.00%) | +Bin 43: [ 1]( 1.00%) | ******************** +Bin 44: [ 1]( 1.00%) | ******************** +Bin 45: [ 0]( 0.00%) | +Bin 46: [ 1]( 1.00%) | ******************** +Bin 47: [ 0]( 0.00%) | +Bin 48: [ 1]( 1.00%) | ******************** +Bin 49: [ 0]( 0.00%) | +Bin 50: [ 2]( 2.00%) | **************************************** +Bin 51: [ 1]( 1.00%) | ******************** +Bin 52: [ 1]( 1.00%) | ******************** +Bin 53: [ 0]( 0.00%) | +Bin 54: [ 0]( 0.00%) | +Bin 55: [ 1]( 1.00%) | ******************** +Bin 56: [ 0]( 0.00%) | +Bin 57: [ 0]( 0.00%) | +Bin 58: [ 2]( 2.00%) | **************************************** +Bin 59: [ 0]( 0.00%) | +Bin 60: [ 0]( 0.00%) | +Bin 61: [ 0]( 0.00%) | +Bin 62: [ 0]( 0.00%) | +Bin 63: [ 2]( 2.00%) | **************************************** +Bin 64: [ 2]( 2.00%) | **************************************** +Bin 65: [ 0]( 0.00%) | +Bin 66: [ 1]( 1.00%) | ******************** +Bin 67: [ 2]( 2.00%) | **************************************** +Bin 68: [ 1]( 1.00%) | ******************** +Bin 69: [ 2]( 2.00%) | **************************************** +Bin 70: [ 0]( 0.00%) | +Bin 71: [ 1]( 1.00%) | ******************** +Bin 72: [ 0]( 0.00%) | +Bin 73: [ 4]( 4.00%) | ******************************************************************************** +Bin 74: [ 1]( 1.00%) | ******************** +Bin 75: [ 1]( 1.00%) | ******************** +Bin 76: [ 2]( 2.00%) | **************************************** +Bin 77: [ 0]( 0.00%) | +Bin 78: [ 1]( 1.00%) | ******************** +Bin 79: [ 1]( 1.00%) | ******************** +Bin 80: [ 4]( 4.00%) | ******************************************************************************** +Bin 81: [ 2]( 2.00%) | **************************************** +Bin 82: [ 2]( 2.00%) | **************************************** +Bin 83: [ 2]( 2.00%) | **************************************** +Bin 84: [ 1]( 1.00%) | ******************** +Bin 85: [ 1]( 1.00%) | ******************** +Bin 86: [ 0]( 0.00%) | +Bin 87: [ 1]( 1.00%) | ******************** +Bin 88: [ 0]( 0.00%) | +Bin 89: [ 0]( 0.00%) | +Bin 90: [ 3]( 3.00%) | ************************************************************ +Bin 91: [ 2]( 2.00%) | **************************************** +Bin 92: [ 2]( 2.00%) | **************************************** +Bin 93: [ 1]( 1.00%) | ******************** +Bin 94: [ 0]( 0.00%) | +Bin 95: [ 1]( 1.00%) | ******************** +Bin 96: [ 1]( 1.00%) | ******************** +Bin 97: [ 0]( 0.00%) | +Bin 98: [ 0]( 0.00%) | +Bin 99: [ 1]( 1.00%) | ******************** +------------------------------------------------------ +=== Gaussian Distribution #0 +------------------------------------------------------ +# Histogram (n_samples: 100, avg_bin: 1.00) # +# (scale ref.: 4.00 count = 80 stars) # +# min: -2.88, max: 3.69 +Bin 0: [ 1]( 1.00%) | ******************** +Bin 1: [ 0]( 0.00%) | +Bin 2: [ 0]( 0.00%) | +Bin 3: [ 0]( 0.00%) | +Bin 4: [ 1]( 1.00%) | ******************** +Bin 5: [ 0]( 0.00%) | +Bin 6: [ 0]( 0.00%) | +Bin 7: [ 0]( 0.00%) | +Bin 8: [ 0]( 0.00%) | +Bin 9: [ 0]( 0.00%) | +Bin 10: [ 0]( 0.00%) | +Bin 11: [ 0]( 0.00%) | +Bin 12: [ 0]( 0.00%) | +Bin 13: [ 0]( 0.00%) | +Bin 14: [ 0]( 0.00%) | +Bin 15: [ 1]( 1.00%) | ******************** +Bin 16: [ 0]( 0.00%) | +Bin 17: [ 0]( 0.00%) | +Bin 18: [ 1]( 1.00%) | ******************** +Bin 19: [ 1]( 1.00%) | ******************** +Bin 20: [ 1]( 1.00%) | ******************** +Bin 21: [ 1]( 1.00%) | ******************** +Bin 22: [ 1]( 1.00%) | ******************** +Bin 23: [ 1]( 1.00%) | ******************** +Bin 24: [ 1]( 1.00%) | ******************** +Bin 25: [ 0]( 0.00%) | +Bin 26: [ 1]( 1.00%) | ******************** +Bin 27: [ 1]( 1.00%) | ******************** +Bin 28: [ 0]( 0.00%) | +Bin 29: [ 0]( 0.00%) | +Bin 30: [ 1]( 1.00%) | ******************** +Bin 31: [ 0]( 0.00%) | +Bin 32: [ 2]( 2.00%) | **************************************** +Bin 33: [ 3]( 3.00%) | ************************************************************ +Bin 34: [ 2]( 2.00%) | **************************************** +Bin 35: [ 1]( 1.00%) | ******************** +Bin 36: [ 0]( 0.00%) | +Bin 37: [ 4]( 4.00%) | ******************************************************************************** +Bin 38: [ 1]( 1.00%) | ******************** +Bin 39: [ 2]( 2.00%) | **************************************** +Bin 40: [ 1]( 1.00%) | ******************** +Bin 41: [ 0]( 0.00%) | +Bin 42: [ 2]( 2.00%) | **************************************** +Bin 43: [ 1]( 1.00%) | ******************** +Bin 44: [ 0]( 0.00%) | +Bin 45: [ 1]( 1.00%) | ******************** +Bin 46: [ 4]( 4.00%) | ******************************************************************************** +Bin 47: [ 1]( 1.00%) | ******************** +Bin 48: [ 1]( 1.00%) | ******************** +Bin 49: [ 2]( 2.00%) | **************************************** +Bin 50: [ 1]( 1.00%) | ******************** +Bin 51: [ 2]( 2.00%) | **************************************** +Bin 52: [ 1]( 1.00%) | ******************** +Bin 53: [ 3]( 3.00%) | ************************************************************ +Bin 54: [ 3]( 3.00%) | ************************************************************ +Bin 55: [ 0]( 0.00%) | +Bin 56: [ 1]( 1.00%) | ******************** +Bin 57: [ 1]( 1.00%) | ******************** +Bin 58: [ 1]( 1.00%) | ******************** +Bin 59: [ 5]( 5.00%) | ********************************************************************************+ +Bin 60: [ 1]( 1.00%) | ******************** +Bin 61: [ 2]( 2.00%) | **************************************** +Bin 62: [ 1]( 1.00%) | ******************** +Bin 63: [ 0]( 0.00%) | +Bin 64: [ 1]( 1.00%) | ******************** +Bin 65: [ 1]( 1.00%) | ******************** +Bin 66: [ 2]( 2.00%) | **************************************** +Bin 67: [ 0]( 0.00%) | +Bin 68: [ 2]( 2.00%) | **************************************** +Bin 69: [ 2]( 2.00%) | **************************************** +Bin 70: [ 4]( 4.00%) | ******************************************************************************** +Bin 71: [ 1]( 1.00%) | ******************** +Bin 72: [ 1]( 1.00%) | ******************** +Bin 73: [ 3]( 3.00%) | ************************************************************ +Bin 74: [ 1]( 1.00%) | ******************** +Bin 75: [ 1]( 1.00%) | ******************** +Bin 76: [ 2]( 2.00%) | **************************************** +Bin 77: [ 2]( 2.00%) | **************************************** +Bin 78: [ 0]( 0.00%) | +Bin 79: [ 1]( 1.00%) | ******************** +Bin 80: [ 2]( 2.00%) | **************************************** +Bin 81: [ 1]( 1.00%) | ******************** +Bin 82: [ 0]( 0.00%) | +Bin 83: [ 1]( 1.00%) | ******************** +Bin 84: [ 1]( 1.00%) | ******************** +Bin 85: [ 1]( 1.00%) | ******************** +Bin 86: [ 0]( 0.00%) | +Bin 87: [ 1]( 1.00%) | ******************** +Bin 88: [ 2]( 2.00%) | **************************************** +Bin 89: [ 0]( 0.00%) | +Bin 90: [ 1]( 1.00%) | ******************** +Bin 91: [ 0]( 0.00%) | +Bin 92: [ 1]( 1.00%) | ******************** +Bin 93: [ 0]( 0.00%) | +Bin 94: [ 0]( 0.00%) | +Bin 95: [ 0]( 0.00%) | +Bin 96: [ 0]( 0.00%) | +Bin 97: [ 0]( 0.00%) | +Bin 98: [ 1]( 1.00%) | ******************** +Bin 99: [ 1]( 1.00%) | ******************** +------------------------------------------------------ +=== Uniform Distribution #1 +------------------------------------------------------ +# Histogram (n_samples: 1000, avg_bin: 10.00) # +# (scale ref.: 40.00 count = 80 stars) # +# min: -3.00, max: 3.99 +Bin 0: [ 13]( 1.30%) | ************************** +Bin 1: [ 10]( 1.00%) | ******************** +Bin 2: [ 10]( 1.00%) | ******************** +Bin 3: [ 8]( 0.80%) | **************** +Bin 4: [ 10]( 1.00%) | ******************** +Bin 5: [ 20]( 2.00%) | **************************************** +Bin 6: [ 12]( 1.20%) | ************************ +Bin 7: [ 8]( 0.80%) | **************** +Bin 8: [ 5]( 0.50%) | ********** +Bin 9: [ 14]( 1.40%) | **************************** +Bin 10: [ 10]( 1.00%) | ******************** +Bin 11: [ 8]( 0.80%) | **************** +Bin 12: [ 9]( 0.90%) | ****************** +Bin 13: [ 11]( 1.10%) | ********************** +Bin 14: [ 16]( 1.60%) | ******************************** +Bin 15: [ 13]( 1.30%) | ************************** +Bin 16: [ 8]( 0.80%) | **************** +Bin 17: [ 6]( 0.60%) | ************ +Bin 18: [ 9]( 0.90%) | ****************** +Bin 19: [ 14]( 1.40%) | **************************** +Bin 20: [ 10]( 1.00%) | ******************** +Bin 21: [ 12]( 1.20%) | ************************ +Bin 22: [ 7]( 0.70%) | ************** +Bin 23: [ 9]( 0.90%) | ****************** +Bin 24: [ 16]( 1.60%) | ******************************** +Bin 25: [ 12]( 1.20%) | ************************ +Bin 26: [ 8]( 0.80%) | **************** +Bin 27: [ 9]( 0.90%) | ****************** +Bin 28: [ 12]( 1.20%) | ************************ +Bin 29: [ 16]( 1.60%) | ******************************** +Bin 30: [ 6]( 0.60%) | ************ +Bin 31: [ 6]( 0.60%) | ************ +Bin 32: [ 12]( 1.20%) | ************************ +Bin 33: [ 12]( 1.20%) | ************************ +Bin 34: [ 11]( 1.10%) | ********************** +Bin 35: [ 7]( 0.70%) | ************** +Bin 36: [ 18]( 1.80%) | ************************************ +Bin 37: [ 11]( 1.10%) | ********************** +Bin 38: [ 3]( 0.30%) | ****** +Bin 39: [ 10]( 1.00%) | ******************** +Bin 40: [ 15]( 1.50%) | ****************************** +Bin 41: [ 14]( 1.40%) | **************************** +Bin 42: [ 12]( 1.20%) | ************************ +Bin 43: [ 12]( 1.20%) | ************************ +Bin 44: [ 18]( 1.80%) | ************************************ +Bin 45: [ 7]( 0.70%) | ************** +Bin 46: [ 7]( 0.70%) | ************** +Bin 47: [ 16]( 1.60%) | ******************************** +Bin 48: [ 7]( 0.70%) | ************** +Bin 49: [ 6]( 0.60%) | ************ +Bin 50: [ 11]( 1.10%) | ********************** +Bin 51: [ 8]( 0.80%) | **************** +Bin 52: [ 5]( 0.50%) | ********** +Bin 53: [ 14]( 1.40%) | **************************** +Bin 54: [ 9]( 0.90%) | ****************** +Bin 55: [ 10]( 1.00%) | ******************** +Bin 56: [ 7]( 0.70%) | ************** +Bin 57: [ 7]( 0.70%) | ************** +Bin 58: [ 7]( 0.70%) | ************** +Bin 59: [ 8]( 0.80%) | **************** +Bin 60: [ 13]( 1.30%) | ************************** +Bin 61: [ 13]( 1.30%) | ************************** +Bin 62: [ 6]( 0.60%) | ************ +Bin 63: [ 10]( 1.00%) | ******************** +Bin 64: [ 7]( 0.70%) | ************** +Bin 65: [ 4]( 0.40%) | ******** +Bin 66: [ 12]( 1.20%) | ************************ +Bin 67: [ 7]( 0.70%) | ************** +Bin 68: [ 7]( 0.70%) | ************** +Bin 69: [ 11]( 1.10%) | ********************** +Bin 70: [ 10]( 1.00%) | ******************** +Bin 71: [ 8]( 0.80%) | **************** +Bin 72: [ 12]( 1.20%) | ************************ +Bin 73: [ 11]( 1.10%) | ********************** +Bin 74: [ 9]( 0.90%) | ****************** +Bin 75: [ 9]( 0.90%) | ****************** +Bin 76: [ 8]( 0.80%) | **************** +Bin 77: [ 13]( 1.30%) | ************************** +Bin 78: [ 14]( 1.40%) | **************************** +Bin 79: [ 12]( 1.20%) | ************************ +Bin 80: [ 11]( 1.10%) | ********************** +Bin 81: [ 6]( 0.60%) | ************ +Bin 82: [ 9]( 0.90%) | ****************** +Bin 83: [ 9]( 0.90%) | ****************** +Bin 84: [ 1]( 0.10%) | ** +Bin 85: [ 15]( 1.50%) | ****************************** +Bin 86: [ 11]( 1.10%) | ********************** +Bin 87: [ 9]( 0.90%) | ****************** +Bin 88: [ 13]( 1.30%) | ************************** +Bin 89: [ 8]( 0.80%) | **************** +Bin 90: [ 5]( 0.50%) | ********** +Bin 91: [ 11]( 1.10%) | ********************** +Bin 92: [ 5]( 0.50%) | ********** +Bin 93: [ 12]( 1.20%) | ************************ +Bin 94: [ 11]( 1.10%) | ********************** +Bin 95: [ 4]( 0.40%) | ******** +Bin 96: [ 8]( 0.80%) | **************** +Bin 97: [ 9]( 0.90%) | ****************** +Bin 98: [ 15]( 1.50%) | ****************************** +Bin 99: [ 11]( 1.10%) | ********************** +------------------------------------------------------ +=== Gaussian Distribution #1 +------------------------------------------------------ +# Histogram (n_samples: 1000, avg_bin: 10.00) # +# (scale ref.: 40.00 count = 80 stars) # +# min: -4.81, max: 5.64 +Bin 0: [ 1]( 0.10%) | ** +Bin 1: [ 0]( 0.00%) | +Bin 2: [ 0]( 0.00%) | +Bin 3: [ 1]( 0.10%) | ** +Bin 4: [ 0]( 0.00%) | +Bin 5: [ 0]( 0.00%) | +Bin 6: [ 0]( 0.00%) | +Bin 7: [ 0]( 0.00%) | +Bin 8: [ 0]( 0.00%) | +Bin 9: [ 0]( 0.00%) | +Bin 10: [ 1]( 0.10%) | ** +Bin 11: [ 2]( 0.20%) | **** +Bin 12: [ 0]( 0.00%) | +Bin 13: [ 2]( 0.20%) | **** +Bin 14: [ 1]( 0.10%) | ** +Bin 15: [ 0]( 0.00%) | +Bin 16: [ 2]( 0.20%) | **** +Bin 17: [ 2]( 0.20%) | **** +Bin 18: [ 2]( 0.20%) | **** +Bin 19: [ 0]( 0.00%) | +Bin 20: [ 2]( 0.20%) | **** +Bin 21: [ 4]( 0.40%) | ******** +Bin 22: [ 3]( 0.30%) | ****** +Bin 23: [ 6]( 0.60%) | ************ +Bin 24: [ 5]( 0.50%) | ********** +Bin 25: [ 2]( 0.20%) | **** +Bin 26: [ 7]( 0.70%) | ************** +Bin 27: [ 8]( 0.80%) | **************** +Bin 28: [ 11]( 1.10%) | ********************** +Bin 29: [ 6]( 0.60%) | ************ +Bin 30: [ 12]( 1.20%) | ************************ +Bin 31: [ 8]( 0.80%) | **************** +Bin 32: [ 11]( 1.10%) | ********************** +Bin 33: [ 10]( 1.00%) | ******************** +Bin 34: [ 20]( 2.00%) | **************************************** +Bin 35: [ 17]( 1.70%) | ********************************** +Bin 36: [ 13]( 1.30%) | ************************** +Bin 37: [ 17]( 1.70%) | ********************************** +Bin 38: [ 17]( 1.70%) | ********************************** +Bin 39: [ 22]( 2.20%) | ******************************************** +Bin 40: [ 19]( 1.90%) | ************************************** +Bin 41: [ 21]( 2.10%) | ****************************************** +Bin 42: [ 22]( 2.20%) | ******************************************** +Bin 43: [ 34]( 3.40%) | ******************************************************************** +Bin 44: [ 21]( 2.10%) | ****************************************** +Bin 45: [ 18]( 1.80%) | ************************************ +Bin 46: [ 24]( 2.40%) | ************************************************ +Bin 47: [ 25]( 2.50%) | ************************************************** +Bin 48: [ 24]( 2.40%) | ************************************************ +Bin 49: [ 28]( 2.80%) | ******************************************************** +Bin 50: [ 40]( 4.00%) | ******************************************************************************** +Bin 51: [ 25]( 2.50%) | ************************************************** +Bin 52: [ 25]( 2.50%) | ************************************************** +Bin 53: [ 34]( 3.40%) | ******************************************************************** +Bin 54: [ 26]( 2.60%) | **************************************************** +Bin 55: [ 25]( 2.50%) | ************************************************** +Bin 56: [ 35]( 3.50%) | ********************************************************************** +Bin 57: [ 25]( 2.50%) | ************************************************** +Bin 58: [ 25]( 2.50%) | ************************************************** +Bin 59: [ 21]( 2.10%) | ****************************************** +Bin 60: [ 24]( 2.40%) | ************************************************ +Bin 61: [ 18]( 1.80%) | ************************************ +Bin 62: [ 25]( 2.50%) | ************************************************** +Bin 63: [ 24]( 2.40%) | ************************************************ +Bin 64: [ 20]( 2.00%) | **************************************** +Bin 65: [ 14]( 1.40%) | **************************** +Bin 66: [ 19]( 1.90%) | ************************************** +Bin 67: [ 10]( 1.00%) | ******************** +Bin 68: [ 12]( 1.20%) | ************************ +Bin 69: [ 5]( 0.50%) | ********** +Bin 70: [ 14]( 1.40%) | **************************** +Bin 71: [ 9]( 0.90%) | ****************** +Bin 72: [ 8]( 0.80%) | **************** +Bin 73: [ 8]( 0.80%) | **************** +Bin 74: [ 7]( 0.70%) | ************** +Bin 75: [ 9]( 0.90%) | ****************** +Bin 76: [ 4]( 0.40%) | ******** +Bin 77: [ 4]( 0.40%) | ******** +Bin 78: [ 11]( 1.10%) | ********************** +Bin 79: [ 5]( 0.50%) | ********** +Bin 80: [ 2]( 0.20%) | **** +Bin 81: [ 2]( 0.20%) | **** +Bin 82: [ 1]( 0.10%) | ** +Bin 83: [ 0]( 0.00%) | +Bin 84: [ 2]( 0.20%) | **** +Bin 85: [ 3]( 0.30%) | ****** +Bin 86: [ 1]( 0.10%) | ** +Bin 87: [ 0]( 0.00%) | +Bin 88: [ 3]( 0.30%) | ****** +Bin 89: [ 0]( 0.00%) | +Bin 90: [ 2]( 0.20%) | **** +Bin 91: [ 1]( 0.10%) | ** +Bin 92: [ 0]( 0.00%) | +Bin 93: [ 0]( 0.00%) | +Bin 94: [ 0]( 0.00%) | +Bin 95: [ 0]( 0.00%) | +Bin 96: [ 0]( 0.00%) | +Bin 97: [ 0]( 0.00%) | +Bin 98: [ 0]( 0.00%) | +Bin 99: [ 1]( 0.10%) | ** +------------------------------------------------------ +=== Uniform Distribution #2 +------------------------------------------------------ +# Histogram (n_samples: 10000, avg_bin: 100.00) # +# (scale ref.: 400.00 count = 80 stars) # +# min: -3.00, max: 4.00 +Bin 0: [ 95]( 0.95%) | ******************* +Bin 1: [ 115]( 1.15%) | *********************** +Bin 2: [ 104]( 1.04%) | ******************** +Bin 3: [ 83]( 0.83%) | **************** +Bin 4: [ 93]( 0.93%) | ****************** +Bin 5: [ 92]( 0.92%) | ****************** +Bin 6: [ 95]( 0.95%) | ******************* +Bin 7: [ 98]( 0.98%) | ******************* +Bin 8: [ 107]( 1.07%) | ********************* +Bin 9: [ 111]( 1.11%) | ********************** +Bin 10: [ 110]( 1.10%) | ********************** +Bin 11: [ 91]( 0.91%) | ****************** +Bin 12: [ 92]( 0.92%) | ****************** +Bin 13: [ 103]( 1.03%) | ******************** +Bin 14: [ 96]( 0.96%) | ******************* +Bin 15: [ 96]( 0.96%) | ******************* +Bin 16: [ 87]( 0.87%) | ***************** +Bin 17: [ 92]( 0.92%) | ****************** +Bin 18: [ 98]( 0.98%) | ******************* +Bin 19: [ 114]( 1.14%) | ********************** +Bin 20: [ 84]( 0.84%) | **************** +Bin 21: [ 125]( 1.25%) | ************************* +Bin 22: [ 93]( 0.93%) | ****************** +Bin 23: [ 111]( 1.11%) | ********************** +Bin 24: [ 96]( 0.96%) | ******************* +Bin 25: [ 114]( 1.14%) | ********************** +Bin 26: [ 115]( 1.15%) | *********************** +Bin 27: [ 109]( 1.09%) | ********************* +Bin 28: [ 93]( 0.93%) | ****************** +Bin 29: [ 101]( 1.01%) | ******************** +Bin 30: [ 104]( 1.04%) | ******************** +Bin 31: [ 107]( 1.07%) | ********************* +Bin 32: [ 101]( 1.01%) | ******************** +Bin 33: [ 90]( 0.90%) | ****************** +Bin 34: [ 89]( 0.89%) | ***************** +Bin 35: [ 109]( 1.09%) | ********************* +Bin 36: [ 88]( 0.88%) | ***************** +Bin 37: [ 98]( 0.98%) | ******************* +Bin 38: [ 116]( 1.16%) | *********************** +Bin 39: [ 105]( 1.05%) | ********************* +Bin 40: [ 79]( 0.79%) | *************** +Bin 41: [ 95]( 0.95%) | ******************* +Bin 42: [ 126]( 1.26%) | ************************* +Bin 43: [ 97]( 0.97%) | ******************* +Bin 44: [ 120]( 1.20%) | ************************ +Bin 45: [ 104]( 1.04%) | ******************** +Bin 46: [ 101]( 1.01%) | ******************** +Bin 47: [ 105]( 1.05%) | ********************* +Bin 48: [ 89]( 0.89%) | ***************** +Bin 49: [ 103]( 1.03%) | ******************** +Bin 50: [ 103]( 1.03%) | ******************** +Bin 51: [ 99]( 0.99%) | ******************* +Bin 52: [ 82]( 0.82%) | **************** +Bin 53: [ 108]( 1.08%) | ********************* +Bin 54: [ 99]( 0.99%) | ******************* +Bin 55: [ 101]( 1.01%) | ******************** +Bin 56: [ 100]( 1.00%) | ******************** +Bin 57: [ 92]( 0.92%) | ****************** +Bin 58: [ 102]( 1.02%) | ******************** +Bin 59: [ 96]( 0.96%) | ******************* +Bin 60: [ 91]( 0.91%) | ****************** +Bin 61: [ 108]( 1.08%) | ********************* +Bin 62: [ 102]( 1.02%) | ******************** +Bin 63: [ 113]( 1.13%) | ********************** +Bin 64: [ 103]( 1.03%) | ******************** +Bin 65: [ 107]( 1.07%) | ********************* +Bin 66: [ 99]( 0.99%) | ******************* +Bin 67: [ 84]( 0.84%) | **************** +Bin 68: [ 108]( 1.08%) | ********************* +Bin 69: [ 106]( 1.06%) | ********************* +Bin 70: [ 104]( 1.04%) | ******************** +Bin 71: [ 98]( 0.98%) | ******************* +Bin 72: [ 108]( 1.08%) | ********************* +Bin 73: [ 99]( 0.99%) | ******************* +Bin 74: [ 94]( 0.94%) | ****************** +Bin 75: [ 98]( 0.98%) | ******************* +Bin 76: [ 91]( 0.91%) | ****************** +Bin 77: [ 100]( 1.00%) | ******************** +Bin 78: [ 89]( 0.89%) | ***************** +Bin 79: [ 111]( 1.11%) | ********************** +Bin 80: [ 105]( 1.05%) | ********************* +Bin 81: [ 104]( 1.04%) | ******************** +Bin 82: [ 102]( 1.02%) | ******************** +Bin 83: [ 73]( 0.73%) | ************** +Bin 84: [ 91]( 0.91%) | ****************** +Bin 85: [ 111]( 1.11%) | ********************** +Bin 86: [ 88]( 0.88%) | ***************** +Bin 87: [ 114]( 1.14%) | ********************** +Bin 88: [ 103]( 1.03%) | ******************** +Bin 89: [ 109]( 1.09%) | ********************* +Bin 90: [ 97]( 0.97%) | ******************* +Bin 91: [ 99]( 0.99%) | ******************* +Bin 92: [ 91]( 0.91%) | ****************** +Bin 93: [ 106]( 1.06%) | ********************* +Bin 94: [ 99]( 0.99%) | ******************* +Bin 95: [ 84]( 0.84%) | **************** +Bin 96: [ 103]( 1.03%) | ******************** +Bin 97: [ 95]( 0.95%) | ******************* +Bin 98: [ 100]( 1.00%) | ******************** +Bin 99: [ 92]( 0.92%) | ****************** +------------------------------------------------------ +=== Gaussian Distribution #2 +------------------------------------------------------ +# Histogram (n_samples: 10000, avg_bin: 100.00) # +# (scale ref.: 400.00 count = 80 stars) # +# min: -5.33, max: 6.16 +Bin 0: [ 1]( 0.01%) | +Bin 1: [ 0]( 0.00%) | +Bin 2: [ 0]( 0.00%) | +Bin 3: [ 1]( 0.01%) | +Bin 4: [ 0]( 0.00%) | +Bin 5: [ 1]( 0.01%) | +Bin 6: [ 1]( 0.01%) | +Bin 7: [ 1]( 0.01%) | +Bin 8: [ 3]( 0.03%) | +Bin 9: [ 2]( 0.02%) | +Bin 10: [ 5]( 0.05%) | * +Bin 11: [ 6]( 0.06%) | * +Bin 12: [ 0]( 0.00%) | +Bin 13: [ 4]( 0.04%) | +Bin 14: [ 3]( 0.03%) | +Bin 15: [ 5]( 0.05%) | * +Bin 16: [ 14]( 0.14%) | ** +Bin 17: [ 20]( 0.20%) | **** +Bin 18: [ 18]( 0.18%) | *** +Bin 19: [ 19]( 0.19%) | *** +Bin 20: [ 20]( 0.20%) | **** +Bin 21: [ 24]( 0.24%) | **** +Bin 22: [ 27]( 0.27%) | ***** +Bin 23: [ 33]( 0.33%) | ****** +Bin 24: [ 43]( 0.43%) | ******** +Bin 25: [ 43]( 0.43%) | ******** +Bin 26: [ 46]( 0.46%) | ********* +Bin 27: [ 71]( 0.71%) | ************** +Bin 28: [ 66]( 0.66%) | ************* +Bin 29: [ 81]( 0.81%) | **************** +Bin 30: [ 86]( 0.86%) | ***************** +Bin 31: [ 124]( 1.24%) | ************************ +Bin 32: [ 109]( 1.09%) | ********************* +Bin 33: [ 156]( 1.56%) | ******************************* +Bin 34: [ 131]( 1.31%) | ************************** +Bin 35: [ 152]( 1.52%) | ****************************** +Bin 36: [ 191]( 1.91%) | ************************************** +Bin 37: [ 177]( 1.77%) | *********************************** +Bin 38: [ 183]( 1.83%) | ************************************ +Bin 39: [ 211]( 2.11%) | ****************************************** +Bin 40: [ 229]( 2.29%) | ********************************************* +Bin 41: [ 256]( 2.56%) | *************************************************** +Bin 42: [ 246]( 2.46%) | ************************************************* +Bin 43: [ 251]( 2.51%) | ************************************************** +Bin 44: [ 268]( 2.68%) | ***************************************************** +Bin 45: [ 274]( 2.74%) | ****************************************************** +Bin 46: [ 301]( 3.01%) | ************************************************************ +Bin 47: [ 311]( 3.11%) | ************************************************************** +Bin 48: [ 309]( 3.09%) | ************************************************************* +Bin 49: [ 289]( 2.89%) | ********************************************************* +Bin 50: [ 296]( 2.96%) | *********************************************************** +Bin 51: [ 278]( 2.78%) | ******************************************************* +Bin 52: [ 314]( 3.14%) | ************************************************************** +Bin 53: [ 302]( 3.02%) | ************************************************************ +Bin 54: [ 283]( 2.83%) | ******************************************************** +Bin 55: [ 273]( 2.73%) | ****************************************************** +Bin 56: [ 277]( 2.77%) | ******************************************************* +Bin 57: [ 251]( 2.51%) | ************************************************** +Bin 58: [ 253]( 2.53%) | ************************************************** +Bin 59: [ 249]( 2.49%) | ************************************************* +Bin 60: [ 235]( 2.35%) | *********************************************** +Bin 61: [ 240]( 2.40%) | ************************************************ +Bin 62: [ 182]( 1.82%) | ************************************ +Bin 63: [ 196]( 1.96%) | *************************************** +Bin 64: [ 177]( 1.77%) | *********************************** +Bin 65: [ 156]( 1.56%) | ******************************* +Bin 66: [ 158]( 1.58%) | ******************************* +Bin 67: [ 141]( 1.41%) | **************************** +Bin 68: [ 114]( 1.14%) | ********************** +Bin 69: [ 106]( 1.06%) | ********************* +Bin 70: [ 107]( 1.07%) | ********************* +Bin 71: [ 83]( 0.83%) | **************** +Bin 72: [ 63]( 0.63%) | ************ +Bin 73: [ 67]( 0.67%) | ************* +Bin 74: [ 56]( 0.56%) | *********** +Bin 75: [ 71]( 0.71%) | ************** +Bin 76: [ 43]( 0.43%) | ******** +Bin 77: [ 33]( 0.33%) | ****** +Bin 78: [ 28]( 0.28%) | ***** +Bin 79: [ 31]( 0.31%) | ****** +Bin 80: [ 26]( 0.26%) | ***** +Bin 81: [ 27]( 0.27%) | ***** +Bin 82: [ 9]( 0.09%) | * +Bin 83: [ 15]( 0.15%) | *** +Bin 84: [ 13]( 0.13%) | ** +Bin 85: [ 8]( 0.08%) | * +Bin 86: [ 5]( 0.05%) | * +Bin 87: [ 5]( 0.05%) | * +Bin 88: [ 4]( 0.04%) | +Bin 89: [ 5]( 0.05%) | * +Bin 90: [ 2]( 0.02%) | +Bin 91: [ 2]( 0.02%) | +Bin 92: [ 1]( 0.01%) | +Bin 93: [ 1]( 0.01%) | +Bin 94: [ 0]( 0.00%) | +Bin 95: [ 1]( 0.01%) | +Bin 96: [ 0]( 0.00%) | +Bin 97: [ 0]( 0.00%) | +Bin 98: [ 0]( 0.00%) | +Bin 99: [ 1]( 0.01%) | +------------------------------------------------------ +=== Uniform Distribution #3 +------------------------------------------------------ +# Histogram (n_samples: 100000, avg_bin: 1000.00) # +# (scale ref.: 4000.00 count = 80 stars) # +# min: -3.00, max: 4.00 +Bin 0: [ 1000]( 1.00%) | ******************** +Bin 1: [ 975]( 0.97%) | ******************* +Bin 2: [ 920]( 0.92%) | ****************** +Bin 3: [ 1004]( 1.00%) | ******************** +Bin 4: [ 1010]( 1.01%) | ******************** +Bin 5: [ 999]( 1.00%) | ******************* +Bin 6: [ 1018]( 1.02%) | ******************** +Bin 7: [ 958]( 0.96%) | ******************* +Bin 8: [ 966]( 0.97%) | ******************* +Bin 9: [ 942]( 0.94%) | ****************** +Bin 10: [ 964]( 0.96%) | ******************* +Bin 11: [ 1033]( 1.03%) | ******************** +Bin 12: [ 1041]( 1.04%) | ******************** +Bin 13: [ 956]( 0.96%) | ******************* +Bin 14: [ 1001]( 1.00%) | ******************** +Bin 15: [ 998]( 1.00%) | ******************* +Bin 16: [ 1002]( 1.00%) | ******************** +Bin 17: [ 992]( 0.99%) | ******************* +Bin 18: [ 1057]( 1.06%) | ********************* +Bin 19: [ 1014]( 1.01%) | ******************** +Bin 20: [ 997]( 1.00%) | ******************* +Bin 21: [ 1025]( 1.03%) | ******************** +Bin 22: [ 1005]( 1.00%) | ******************** +Bin 23: [ 992]( 0.99%) | ******************* +Bin 24: [ 1015]( 1.01%) | ******************** +Bin 25: [ 981]( 0.98%) | ******************* +Bin 26: [ 986]( 0.99%) | ******************* +Bin 27: [ 986]( 0.99%) | ******************* +Bin 28: [ 1008]( 1.01%) | ******************** +Bin 29: [ 1053]( 1.05%) | ********************* +Bin 30: [ 1038]( 1.04%) | ******************** +Bin 31: [ 1009]( 1.01%) | ******************** +Bin 32: [ 1010]( 1.01%) | ******************** +Bin 33: [ 1023]( 1.02%) | ******************** +Bin 34: [ 1030]( 1.03%) | ******************** +Bin 35: [ 980]( 0.98%) | ******************* +Bin 36: [ 995]( 1.00%) | ******************* +Bin 37: [ 1028]( 1.03%) | ******************** +Bin 38: [ 1000]( 1.00%) | ******************** +Bin 39: [ 999]( 1.00%) | ******************* +Bin 40: [ 987]( 0.99%) | ******************* +Bin 41: [ 960]( 0.96%) | ******************* +Bin 42: [ 1045]( 1.04%) | ******************** +Bin 43: [ 1089]( 1.09%) | ********************* +Bin 44: [ 1026]( 1.03%) | ******************** +Bin 45: [ 995]( 1.00%) | ******************* +Bin 46: [ 991]( 0.99%) | ******************* +Bin 47: [ 970]( 0.97%) | ******************* +Bin 48: [ 994]( 0.99%) | ******************* +Bin 49: [ 1006]( 1.01%) | ******************** +Bin 50: [ 963]( 0.96%) | ******************* +Bin 51: [ 1045]( 1.04%) | ******************** +Bin 52: [ 1024]( 1.02%) | ******************** +Bin 53: [ 986]( 0.99%) | ******************* +Bin 54: [ 936]( 0.94%) | ****************** +Bin 55: [ 990]( 0.99%) | ******************* +Bin 56: [ 1016]( 1.02%) | ******************** +Bin 57: [ 982]( 0.98%) | ******************* +Bin 58: [ 1033]( 1.03%) | ******************** +Bin 59: [ 1017]( 1.02%) | ******************** +Bin 60: [ 1028]( 1.03%) | ******************** +Bin 61: [ 921]( 0.92%) | ****************** +Bin 62: [ 994]( 0.99%) | ******************* +Bin 63: [ 1030]( 1.03%) | ******************** +Bin 64: [ 1006]( 1.01%) | ******************** +Bin 65: [ 1032]( 1.03%) | ******************** +Bin 66: [ 995]( 1.00%) | ******************* +Bin 67: [ 963]( 0.96%) | ******************* +Bin 68: [ 998]( 1.00%) | ******************* +Bin 69: [ 990]( 0.99%) | ******************* +Bin 70: [ 943]( 0.94%) | ****************** +Bin 71: [ 967]( 0.97%) | ******************* +Bin 72: [ 1047]( 1.05%) | ******************** +Bin 73: [ 1018]( 1.02%) | ******************** +Bin 74: [ 986]( 0.99%) | ******************* +Bin 75: [ 1011]( 1.01%) | ******************** +Bin 76: [ 950]( 0.95%) | ******************* +Bin 77: [ 956]( 0.96%) | ******************* +Bin 78: [ 999]( 1.00%) | ******************* +Bin 79: [ 981]( 0.98%) | ******************* +Bin 80: [ 975]( 0.97%) | ******************* +Bin 81: [ 960]( 0.96%) | ******************* +Bin 82: [ 1016]( 1.02%) | ******************** +Bin 83: [ 1026]( 1.03%) | ******************** +Bin 84: [ 993]( 0.99%) | ******************* +Bin 85: [ 1022]( 1.02%) | ******************** +Bin 86: [ 989]( 0.99%) | ******************* +Bin 87: [ 955]( 0.95%) | ******************* +Bin 88: [ 994]( 0.99%) | ******************* +Bin 89: [ 997]( 1.00%) | ******************* +Bin 90: [ 1002]( 1.00%) | ******************** +Bin 91: [ 1039]( 1.04%) | ******************** +Bin 92: [ 1008]( 1.01%) | ******************** +Bin 93: [ 1080]( 1.08%) | ********************* +Bin 94: [ 1054]( 1.05%) | ********************* +Bin 95: [ 987]( 0.99%) | ******************* +Bin 96: [ 1047]( 1.05%) | ******************** +Bin 97: [ 975]( 0.97%) | ******************* +Bin 98: [ 1027]( 1.03%) | ******************** +Bin 99: [ 974]( 0.97%) | ******************* +------------------------------------------------------ +=== Gaussian Distribution #3 +------------------------------------------------------ +# Histogram (n_samples: 100000, avg_bin: 1000.00) # +# (scale ref.: 4000.00 count = 80 stars) # +# min: -6.38, max: 7.31 +Bin 0: [ 1]( 0.00%) | +Bin 1: [ 0]( 0.00%) | +Bin 2: [ 0]( 0.00%) | +Bin 3: [ 0]( 0.00%) | +Bin 4: [ 0]( 0.00%) | +Bin 5: [ 1]( 0.00%) | +Bin 6: [ 1]( 0.00%) | +Bin 7: [ 6]( 0.01%) | +Bin 8: [ 2]( 0.00%) | +Bin 9: [ 2]( 0.00%) | +Bin 10: [ 5]( 0.01%) | +Bin 11: [ 5]( 0.01%) | +Bin 12: [ 15]( 0.01%) | +Bin 13: [ 9]( 0.01%) | +Bin 14: [ 23]( 0.02%) | +Bin 15: [ 30]( 0.03%) | +Bin 16: [ 27]( 0.03%) | +Bin 17: [ 48]( 0.05%) | +Bin 18: [ 54]( 0.05%) | * +Bin 19: [ 76]( 0.08%) | * +Bin 20: [ 108]( 0.11%) | ** +Bin 21: [ 119]( 0.12%) | ** +Bin 22: [ 145]( 0.14%) | ** +Bin 23: [ 171]( 0.17%) | *** +Bin 24: [ 230]( 0.23%) | **** +Bin 25: [ 281]( 0.28%) | ***** +Bin 26: [ 345]( 0.34%) | ****** +Bin 27: [ 419]( 0.42%) | ******** +Bin 28: [ 486]( 0.49%) | ********* +Bin 29: [ 609]( 0.61%) | ************ +Bin 30: [ 734]( 0.73%) | ************** +Bin 31: [ 837]( 0.84%) | **************** +Bin 32: [ 983]( 0.98%) | ******************* +Bin 33: [ 1140]( 1.14%) | ********************** +Bin 34: [ 1308]( 1.31%) | ************************** +Bin 35: [ 1529]( 1.53%) | ****************************** +Bin 36: [ 1671]( 1.67%) | ********************************* +Bin 37: [ 1882]( 1.88%) | ************************************* +Bin 38: [ 2066]( 2.07%) | ***************************************** +Bin 39: [ 2333]( 2.33%) | ********************************************** +Bin 40: [ 2418]( 2.42%) | ************************************************ +Bin 41: [ 2692]( 2.69%) | ***************************************************** +Bin 42: [ 2700]( 2.70%) | ****************************************************** +Bin 43: [ 3041]( 3.04%) | ************************************************************ +Bin 44: [ 3085]( 3.08%) | ************************************************************* +Bin 45: [ 3297]( 3.30%) | ***************************************************************** +Bin 46: [ 3395]( 3.40%) | ******************************************************************* +Bin 47: [ 3595]( 3.60%) | *********************************************************************** +Bin 48: [ 3579]( 3.58%) | *********************************************************************** +Bin 49: [ 3591]( 3.59%) | *********************************************************************** +Bin 50: [ 3624]( 3.62%) | ************************************************************************ +Bin 51: [ 3587]( 3.59%) | *********************************************************************** +Bin 52: [ 3603]( 3.60%) | ************************************************************************ +Bin 53: [ 3451]( 3.45%) | ********************************************************************* +Bin 54: [ 3365]( 3.36%) | ******************************************************************* +Bin 55: [ 3183]( 3.18%) | *************************************************************** +Bin 56: [ 3135]( 3.14%) | ************************************************************** +Bin 57: [ 3000]( 3.00%) | ************************************************************ +Bin 58: [ 2661]( 2.66%) | ***************************************************** +Bin 59: [ 2580]( 2.58%) | *************************************************** +Bin 60: [ 2342]( 2.34%) | ********************************************** +Bin 61: [ 2176]( 2.18%) | ******************************************* +Bin 62: [ 1952]( 1.95%) | *************************************** +Bin 63: [ 1747]( 1.75%) | ********************************** +Bin 64: [ 1571]( 1.57%) | ******************************* +Bin 65: [ 1379]( 1.38%) | *************************** +Bin 66: [ 1222]( 1.22%) | ************************ +Bin 67: [ 1032]( 1.03%) | ******************** +Bin 68: [ 918]( 0.92%) | ****************** +Bin 69: [ 778]( 0.78%) | *************** +Bin 70: [ 662]( 0.66%) | ************* +Bin 71: [ 552]( 0.55%) | *********** +Bin 72: [ 505]( 0.51%) | ********** +Bin 73: [ 356]( 0.36%) | ******* +Bin 74: [ 325]( 0.33%) | ****** +Bin 75: [ 244]( 0.24%) | **** +Bin 76: [ 219]( 0.22%) | **** +Bin 77: [ 163]( 0.16%) | *** +Bin 78: [ 133]( 0.13%) | ** +Bin 79: [ 96]( 0.10%) | * +Bin 80: [ 84]( 0.08%) | * +Bin 81: [ 75]( 0.07%) | * +Bin 82: [ 49]( 0.05%) | +Bin 83: [ 39]( 0.04%) | +Bin 84: [ 27]( 0.03%) | +Bin 85: [ 23]( 0.02%) | +Bin 86: [ 10]( 0.01%) | +Bin 87: [ 7]( 0.01%) | +Bin 88: [ 10]( 0.01%) | +Bin 89: [ 8]( 0.01%) | +Bin 90: [ 2]( 0.00%) | +Bin 91: [ 3]( 0.00%) | +Bin 92: [ 4]( 0.00%) | +Bin 93: [ 1]( 0.00%) | +Bin 94: [ 1]( 0.00%) | +Bin 95: [ 0]( 0.00%) | +Bin 96: [ 0]( 0.00%) | +Bin 97: [ 1]( 0.00%) | +Bin 98: [ 0]( 0.00%) | +Bin 99: [ 1]( 0.00%) | +------------------------------------------------------ diff --git a/hws/hw4/rng.c b/hws/hw4/rng.c new file mode 100644 index 0000000..5890c5a --- /dev/null +++ b/hws/hw4/rng.c @@ -0,0 +1,69 @@ +#include +#include +#include + +#include "rng.h" + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +float _rng_next_float(rng *rng) { + uint64_t state = (uint64_t)rng->seed; + + state = (6364136223846793005ULL * state) + 1ULL; + + rng->seed = (int64_t)state; + + uint32_t high_bits = (uint32_t)(state >> 40); + + return (float)high_bits * (1.0f / 16777216.0f); +} + +rng *get_rng(int64_t seed) { + rng *r = (rng *)malloc(sizeof(rng)); + if (r == NULL) { + return NULL; + } + r->seed = seed; + return r; +} + +void free_rng(rng* rng) { + free(rng); +} + +float rng_uniform(rng *rng, float a, float b) { + float r = _rng_next_float(rng); + + return a + r * (b - a); +} + +float rng_gaussian(rng *rng, float m, float s) { + static int has_spare = 0; + static float spare; + + if (has_spare) { + has_spare = 0; + return m + s * spare; + } + + has_spare = 1; + float u1, u2; + + do { + u1 = _rng_next_float(rng); + } while (u1 == 0.0f); + + u2 = _rng_next_float(rng); + + float mag = s * sqrt(-2.0f * log(u1)); + float z1 = mag * cos(2.0f * M_PI * u2) + m; + float z2 = mag * sin(2.0f * M_PI * u2); + + mag = sqrt(-2.0f * log(u1)); + z1 = mag * cos(2.0f * M_PI * u2); + spare = mag * sin(2.0f * M_PI * u2); + + return m + s * z1; +} \ No newline at end of file diff --git a/hws/hw4/rng.h b/hws/hw4/rng.h new file mode 100644 index 0000000..c7e587e --- /dev/null +++ b/hws/hw4/rng.h @@ -0,0 +1,15 @@ +#pragma once +#include + +typedef struct rng { + int64_t seed; +} rng; + +rng *get_rng(int64_t seed); + +void free_rng(rng* rng); + +float rng_uniform(rng *rng, float a, float b); + +float rng_gaussian(rng *rng, float m, float s); + diff --git a/hws/hw4/rngutil.c b/hws/hw4/rngutil.c new file mode 100644 index 0000000..4c3c185 --- /dev/null +++ b/hws/hw4/rngutil.c @@ -0,0 +1,90 @@ +#include "rngutil.h" + +Interval *new_interval(size_t n_int) { + Interval *x = malloc(sizeof(Interval)); + x->n_interval = n_int; + x->indexed = calloc(n_int, sizeof(size_t)); + return x; +} + +void free_interval(Interval *x) { + free(x->indexed); + free(x); +} + +void intervalizing(Interval *interval, size_t n, + float *samples /* samples must be sorted */) { + + float lo = samples[0]; + float hi = samples[n - 1]; + + float dx = (hi - lo) / interval->n_interval; + + float curr = lo + dx; + + size_t i = 0; + size_t ind = 0; + while (i < n) { + if (samples[i] < curr) { + i++; + } else { + if (ind == interval->n_interval - 1) { + interval->indexed[ind] = n; + } else { + interval->indexed[ind] = i; + } + + ind++; + curr = lo + (ind + 1) * dx; + } + } + if (interval->indexed[interval->n_interval - 1] != n) { + interval->indexed[interval->n_interval - 1] = n; + } +} + +void print_histogram(Interval *interval, size_t n, float *samples) { + size_t n_interval = interval->n_interval; + size_t prev_cum_count = 0; + + const int MAX_STARS = 80; + + double avg_count = (double) n / (double) n_interval; + double scale_max = avg_count * 4; + printf("------------------------------------------------------\n"); + printf("# Histogram (n_samples: %zu, avg_bin: %.2f) #\n", + n, avg_count); + printf("# (scale ref.: %.2f count = %d stars) #\n", + scale_max, MAX_STARS); + printf("# min: %6.2f, max: %6.2f\n", + samples[0], samples[n - 1]); + size_t i, j; + for (i = 0; i < n_interval; i++) { + size_t current_cumulative_count = interval->indexed[i]; + size_t individual_count = current_cumulative_count - prev_cum_count; + + if (current_cumulative_count < prev_cum_count) { + printf("!\n"); + individual_count = 0; + } + + int num_stars = (int) (((double) individual_count / scale_max) * MAX_STARS); + + if (num_stars > MAX_STARS) { + num_stars = MAX_STARS; + } + + printf("Bin %3zu: [%8zu](%5.2f%%) | ", i, individual_count, (double) individual_count / (double) n * 100.0); + for (j = 0; j < num_stars; j++) { + printf("*"); + } + + if (num_stars == MAX_STARS && (double) individual_count > scale_max) { + printf("+"); + } + printf("\n"); + + prev_cum_count = current_cumulative_count; + } + printf("------------------------------------------------------\n"); +} \ No newline at end of file diff --git a/hws/hw4/rngutil.h b/hws/hw4/rngutil.h new file mode 100644 index 0000000..1bd55cb --- /dev/null +++ b/hws/hw4/rngutil.h @@ -0,0 +1,17 @@ +#include +#include +#include +#include + +typedef struct Interval { + size_t n_interval; + size_t *indexed; +} Interval; + +Interval *new_interval(size_t n_int); + +void free_interval(Interval *x); + +void intervalizing(Interval *interval, size_t n, float *samples); + +void print_histogram(Interval *interval, size_t n, float* samples); \ No newline at end of file