Pure Programmer
Blue Matrix


Cluster Map

Project: Central Limit Theorem

The [[Central_limit_theorem#Classical_CLT|Central Limit Theorem]] states that if we take random samples of size N from any distribution of independent random variables, that the distribution of sample averages (`bar X`) should fall in a normal distribution regardless of the type of distribution of the samples. For example our typical random number generators use a uniform, not normal, distribution. But if we take samples of size N, average them, then we should get a sample distribution that is normal with a mean that is the same as our sample source distribution mean and a standard deviation that is equal to the standard deviation of our sample source distribution divided by `sqrt(N)`.

Write a program that accepts a sample size N on the command line and the number of samples to collect M. Then generate the mean (`bar X`) of a sample of size N from random float values [0, 20). Do this M times maintaining a running count of the occurances in an array of 20 by using `lfloor bar X rfloor` (use floor() or int() function) to select the array element to increment. Output a tab-delimited table with the array index in column 1 and the count in column 2. This output can easily be piped into the Histogram project to get a simple graph that should look like a normal distribution centered on 10.0. Notice how as the sample size increases, the standard deviation shrinks?

Output
$ rustc CentralLimitTheorem.rs error: unknown format trait `d` --> CentralLimitTheorem.rs:48:31 | 48 | println!("{}", format!("{0:d}\t{1:d}", i, meanCounts[i])); | ^ | = note: the only appropriate formatting traits are: - ``, which uses the `Display` trait - `?`, which uses the `Debug` trait - `e`, which uses the `LowerExp` trait - `E`, which uses the `UpperExp` trait - `o`, which uses the `Octal` trait - `p`, which uses the `Pointer` trait - `b`, which uses the `Binary` trait - `x`, which uses the `LowerHex` trait - `X`, which uses the `UpperHex` trait error: unknown format trait `d` --> CentralLimitTheorem.rs:48:38 | 48 | println!("{}", format!("{0:d}\t{1:d}", i, meanCounts[i])); | ^ | = note: the only appropriate formatting traits are: - ``, which uses the `Display` trait - `?`, which uses the `Debug` trait - `e`, which uses the `LowerExp` trait - `E`, which uses the `UpperExp` trait - `o`, which uses the `Octal` trait - `p`, which uses the `Pointer` trait - `b`, which uses the `Binary` trait - `x`, which uses the `LowerHex` trait - `X`, which uses the `UpperHex` trait error[E0425]: cannot find value `args` in this scope --> CentralLimitTheorem.rs:13:5 | 13 | if args.len() != 3 { | ^^^^ not found in this scope | help: consider importing this function | 8 + use std::env::args; | error[E0425]: cannot find function `exit` in this scope --> CentralLimitTheorem.rs:15:3 | 15 | exit(1); | ^^^^ not found in this scope | help: consider importing this function | 8 + use std::process::exit; | error[E0425]: cannot find value `Utils` in this scope --> CentralLimitTheorem.rs:17:29 | 17 | let mut sampleSize:isize = Utils.stoiWithDefault(args[1], 10); | ^^^^^ not found in this scope error[E0425]: cannot find value `args` in this scope --> CentralLimitTheorem.rs:17:51 | 17 | let mut sampleSize:isize = Utils.stoiWithDefault(args[1], 10); | ^^^^ not found in this scope | help: consider importing this function | 8 + use std::env::args; | error[E0425]: cannot find value `Utils` in this scope --> CentralLimitTheorem.rs:18:34 | 18 | let mut numberOfSamples:isize = Utils.stoiWithDefault(args[2], 100); | ^^^^^ not found in this scope error[E0425]: cannot find value `args` in this scope --> CentralLimitTheorem.rs:18:56 | 18 | let mut numberOfSamples:isize = Utils.stoiWithDefault(args[2], 100); | ^^^^ not found in this scope | help: consider importing this function | 8 + use std::env::args; | error[E0425]: cannot find function `random` in this scope --> CentralLimitTheorem.rs:36:13 | 36 | sum += random(0,sampleMax) * (sampleMax) as f64; | ^^^^^^ not found in this scope error[E0277]: the type `[isize]` cannot be indexed by `isize` --> CentralLimitTheorem.rs:41:15 | 41 | meanCounts[(mean) as isize] += 1; | ^^^^^^^^^^^^^^^ slice indices are of type `usize` or ranges of `usize` | = help: the trait `SliceIndex<[isize]>` is not implemented for `isize` = help: the trait `SliceIndex<[T]>` is implemented for `usize` = note: required for `Vec<isize>` to implement `Index<isize>` error[E0277]: the type `[isize]` cannot be indexed by `isize` --> CentralLimitTheorem.rs:48:57 | 48 | println!("{}", format!("{0:d}\t{1:d}", i, meanCounts[i])); | ^ slice indices are of type `usize` or ranges of `usize` | = help: the trait `SliceIndex<[isize]>` is not implemented for `isize` = help: the trait `SliceIndex<[T]>` is implemented for `usize` = note: required for `Vec<isize>` to implement `Index<isize>` error: aborting due to 11 previous errors Some errors have detailed explanations: E0277, E0425. For more information about an error, try `rustc --explain E0277`. $ rustc CentralLimitTheorem.rs error: unknown format trait `d` --> CentralLimitTheorem.rs:48:31 | 48 | println!("{}", format!("{0:d}\t{1:d}", i, meanCounts[i])); | ^ | = note: the only appropriate formatting traits are: - ``, which uses the `Display` trait - `?`, which uses the `Debug` trait - `e`, which uses the `LowerExp` trait - `E`, which uses the `UpperExp` trait - `o`, which uses the `Octal` trait - `p`, which uses the `Pointer` trait - `b`, which uses the `Binary` trait - `x`, which uses the `LowerHex` trait - `X`, which uses the `UpperHex` trait error: unknown format trait `d` --> CentralLimitTheorem.rs:48:38 | 48 | println!("{}", format!("{0:d}\t{1:d}", i, meanCounts[i])); | ^ | = note: the only appropriate formatting traits are: - ``, which uses the `Display` trait - `?`, which uses the `Debug` trait - `e`, which uses the `LowerExp` trait - `E`, which uses the `UpperExp` trait - `o`, which uses the `Octal` trait - `p`, which uses the `Pointer` trait - `b`, which uses the `Binary` trait - `x`, which uses the `LowerHex` trait - `X`, which uses the `UpperHex` trait error[E0425]: cannot find value `args` in this scope --> CentralLimitTheorem.rs:13:5 | 13 | if args.len() != 3 { | ^^^^ not found in this scope | help: consider importing this function | 8 + use std::env::args; | error[E0425]: cannot find function `exit` in this scope --> CentralLimitTheorem.rs:15:3 | 15 | exit(1); | ^^^^ not found in this scope | help: consider importing this function | 8 + use std::process::exit; | error[E0425]: cannot find value `Utils` in this scope --> CentralLimitTheorem.rs:17:29 | 17 | let mut sampleSize:isize = Utils.stoiWithDefault(args[1], 10); | ^^^^^ not found in this scope error[E0425]: cannot find value `args` in this scope --> CentralLimitTheorem.rs:17:51 | 17 | let mut sampleSize:isize = Utils.stoiWithDefault(args[1], 10); | ^^^^ not found in this scope | help: consider importing this function | 8 + use std::env::args; | error[E0425]: cannot find value `Utils` in this scope --> CentralLimitTheorem.rs:18:34 | 18 | let mut numberOfSamples:isize = Utils.stoiWithDefault(args[2], 100); | ^^^^^ not found in this scope error[E0425]: cannot find value `args` in this scope --> CentralLimitTheorem.rs:18:56 | 18 | let mut numberOfSamples:isize = Utils.stoiWithDefault(args[2], 100); | ^^^^ not found in this scope | help: consider importing this function | 8 + use std::env::args; | error[E0425]: cannot find function `random` in this scope --> CentralLimitTheorem.rs:36:13 | 36 | sum += random(0,sampleMax) * (sampleMax) as f64; | ^^^^^^ not found in this scope error[E0277]: the type `[isize]` cannot be indexed by `isize` --> CentralLimitTheorem.rs:41:15 | 41 | meanCounts[(mean) as isize] += 1; | ^^^^^^^^^^^^^^^ slice indices are of type `usize` or ranges of `usize` | = help: the trait `SliceIndex<[isize]>` is not implemented for `isize` = help: the trait `SliceIndex<[T]>` is implemented for `usize` = note: required for `Vec<isize>` to implement `Index<isize>` error[E0277]: the type `[isize]` cannot be indexed by `isize` --> CentralLimitTheorem.rs:48:57 | 48 | println!("{}", format!("{0:d}\t{1:d}", i, meanCounts[i])); | ^ slice indices are of type `usize` or ranges of `usize` | = help: the trait `SliceIndex<[isize]>` is not implemented for `isize` = help: the trait `SliceIndex<[T]>` is implemented for `usize` = note: required for `Vec<isize>` to implement `Index<isize>` error: aborting due to 11 previous errors Some errors have detailed explanations: E0277, E0425. For more information about an error, try `rustc --explain E0277`. $ rustc CentralLimitTheorem.rs error: unknown format trait `d` --> CentralLimitTheorem.rs:48:31 | 48 | println!("{}", format!("{0:d}\t{1:d}", i, meanCounts[i])); | ^ | = note: the only appropriate formatting traits are: - ``, which uses the `Display` trait - `?`, which uses the `Debug` trait - `e`, which uses the `LowerExp` trait - `E`, which uses the `UpperExp` trait - `o`, which uses the `Octal` trait - `p`, which uses the `Pointer` trait - `b`, which uses the `Binary` trait - `x`, which uses the `LowerHex` trait - `X`, which uses the `UpperHex` trait error: unknown format trait `d` --> CentralLimitTheorem.rs:48:38 | 48 | println!("{}", format!("{0:d}\t{1:d}", i, meanCounts[i])); | ^ | = note: the only appropriate formatting traits are: - ``, which uses the `Display` trait - `?`, which uses the `Debug` trait - `e`, which uses the `LowerExp` trait - `E`, which uses the `UpperExp` trait - `o`, which uses the `Octal` trait - `p`, which uses the `Pointer` trait - `b`, which uses the `Binary` trait - `x`, which uses the `LowerHex` trait - `X`, which uses the `UpperHex` trait error[E0425]: cannot find value `args` in this scope --> CentralLimitTheorem.rs:13:5 | 13 | if args.len() != 3 { | ^^^^ not found in this scope | help: consider importing this function | 8 + use std::env::args; | error[E0425]: cannot find function `exit` in this scope --> CentralLimitTheorem.rs:15:3 | 15 | exit(1); | ^^^^ not found in this scope | help: consider importing this function | 8 + use std::process::exit; | error[E0425]: cannot find value `Utils` in this scope --> CentralLimitTheorem.rs:17:29 | 17 | let mut sampleSize:isize = Utils.stoiWithDefault(args[1], 10); | ^^^^^ not found in this scope error[E0425]: cannot find value `args` in this scope --> CentralLimitTheorem.rs:17:51 | 17 | let mut sampleSize:isize = Utils.stoiWithDefault(args[1], 10); | ^^^^ not found in this scope | help: consider importing this function | 8 + use std::env::args; | error[E0425]: cannot find value `Utils` in this scope --> CentralLimitTheorem.rs:18:34 | 18 | let mut numberOfSamples:isize = Utils.stoiWithDefault(args[2], 100); | ^^^^^ not found in this scope error[E0425]: cannot find value `args` in this scope --> CentralLimitTheorem.rs:18:56 | 18 | let mut numberOfSamples:isize = Utils.stoiWithDefault(args[2], 100); | ^^^^ not found in this scope | help: consider importing this function | 8 + use std::env::args; | error[E0425]: cannot find function `random` in this scope --> CentralLimitTheorem.rs:36:13 | 36 | sum += random(0,sampleMax) * (sampleMax) as f64; | ^^^^^^ not found in this scope error[E0277]: the type `[isize]` cannot be indexed by `isize` --> CentralLimitTheorem.rs:41:15 | 41 | meanCounts[(mean) as isize] += 1; | ^^^^^^^^^^^^^^^ slice indices are of type `usize` or ranges of `usize` | = help: the trait `SliceIndex<[isize]>` is not implemented for `isize` = help: the trait `SliceIndex<[T]>` is implemented for `usize` = note: required for `Vec<isize>` to implement `Index<isize>` error[E0277]: the type `[isize]` cannot be indexed by `isize` --> CentralLimitTheorem.rs:48:57 | 48 | println!("{}", format!("{0:d}\t{1:d}", i, meanCounts[i])); | ^ slice indices are of type `usize` or ranges of `usize` | = help: the trait `SliceIndex<[isize]>` is not implemented for `isize` = help: the trait `SliceIndex<[T]>` is implemented for `usize` = note: required for `Vec<isize>` to implement `Index<isize>` error: aborting due to 11 previous errors Some errors have detailed explanations: E0277, E0425. For more information about an error, try `rustc --explain E0277`. $ rustc CentralLimitTheorem.rs error: unknown format trait `d` --> CentralLimitTheorem.rs:48:31 | 48 | println!("{}", format!("{0:d}\t{1:d}", i, meanCounts[i])); | ^ | = note: the only appropriate formatting traits are: - ``, which uses the `Display` trait - `?`, which uses the `Debug` trait - `e`, which uses the `LowerExp` trait - `E`, which uses the `UpperExp` trait - `o`, which uses the `Octal` trait - `p`, which uses the `Pointer` trait - `b`, which uses the `Binary` trait - `x`, which uses the `LowerHex` trait - `X`, which uses the `UpperHex` trait error: unknown format trait `d` --> CentralLimitTheorem.rs:48:38 | 48 | println!("{}", format!("{0:d}\t{1:d}", i, meanCounts[i])); | ^ | = note: the only appropriate formatting traits are: - ``, which uses the `Display` trait - `?`, which uses the `Debug` trait - `e`, which uses the `LowerExp` trait - `E`, which uses the `UpperExp` trait - `o`, which uses the `Octal` trait - `p`, which uses the `Pointer` trait - `b`, which uses the `Binary` trait - `x`, which uses the `LowerHex` trait - `X`, which uses the `UpperHex` trait error[E0425]: cannot find value `args` in this scope --> CentralLimitTheorem.rs:13:5 | 13 | if args.len() != 3 { | ^^^^ not found in this scope | help: consider importing this function | 8 + use std::env::args; | error[E0425]: cannot find function `exit` in this scope --> CentralLimitTheorem.rs:15:3 | 15 | exit(1); | ^^^^ not found in this scope | help: consider importing this function | 8 + use std::process::exit; | error[E0425]: cannot find value `Utils` in this scope --> CentralLimitTheorem.rs:17:29 | 17 | let mut sampleSize:isize = Utils.stoiWithDefault(args[1], 10); | ^^^^^ not found in this scope error[E0425]: cannot find value `args` in this scope --> CentralLimitTheorem.rs:17:51 | 17 | let mut sampleSize:isize = Utils.stoiWithDefault(args[1], 10); | ^^^^ not found in this scope | help: consider importing this function | 8 + use std::env::args; | error[E0425]: cannot find value `Utils` in this scope --> CentralLimitTheorem.rs:18:34 | 18 | let mut numberOfSamples:isize = Utils.stoiWithDefault(args[2], 100); | ^^^^^ not found in this scope error[E0425]: cannot find value `args` in this scope --> CentralLimitTheorem.rs:18:56 | 18 | let mut numberOfSamples:isize = Utils.stoiWithDefault(args[2], 100); | ^^^^ not found in this scope | help: consider importing this function | 8 + use std::env::args; | error[E0425]: cannot find function `random` in this scope --> CentralLimitTheorem.rs:36:13 | 36 | sum += random(0,sampleMax) * (sampleMax) as f64; | ^^^^^^ not found in this scope error[E0277]: the type `[isize]` cannot be indexed by `isize` --> CentralLimitTheorem.rs:41:15 | 41 | meanCounts[(mean) as isize] += 1; | ^^^^^^^^^^^^^^^ slice indices are of type `usize` or ranges of `usize` | = help: the trait `SliceIndex<[isize]>` is not implemented for `isize` = help: the trait `SliceIndex<[T]>` is implemented for `usize` = note: required for `Vec<isize>` to implement `Index<isize>` error[E0277]: the type `[isize]` cannot be indexed by `isize` --> CentralLimitTheorem.rs:48:57 | 48 | println!("{}", format!("{0:d}\t{1:d}", i, meanCounts[i])); | ^ slice indices are of type `usize` or ranges of `usize` | = help: the trait `SliceIndex<[isize]>` is not implemented for `isize` = help: the trait `SliceIndex<[T]>` is implemented for `usize` = note: required for `Vec<isize>` to implement `Index<isize>` error: aborting due to 11 previous errors Some errors have detailed explanations: E0277, E0425. For more information about an error, try `rustc --explain E0277`.

Solution