From 9bdd65701843345effb5d6a197dd8b43617cdd90 Mon Sep 17 00:00:00 2001 From: Ishan Jain Date: Mon, 29 May 2023 00:47:07 +0530 Subject: [PATCH] Initial commit, Added example of stratified sampling --- .gitignore | 1 + Cargo.lock | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 7 +++++ src/main.rs | 35 ++++++++++++++++++++++ 4 files changed, 128 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 src/main.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..eed3a4c --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,85 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "getrandom" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "libc" +version = "0.2.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219" + +[[package]] +name = "ppv-lite86" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" + +[[package]] +name = "rand" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", + "rand_hc", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_hc" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" +dependencies = [ + "rand_core", +] + +[[package]] +name = "raytracing-the-rest-of-your-life" +version = "0.1.0" +dependencies = [ + "rand", +] + +[[package]] +name = "wasi" +version = "0.10.2+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..4ef7614 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "raytracing-the-rest-of-your-life" +version = "0.1.0" +edition = "2021" + +[dependencies] +rand = "0.8.4" diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..41689f3 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,35 @@ +use rand::Rng; + +fn main() { + let mut inside_circle = 0u64; + let mut inside_circle_stratified = 0u64; + let mut rng = rand::thread_rng(); + + const SQRT_N: u64 = 10000; + + for i in 0..SQRT_N { + for j in 0..SQRT_N { + let mut x: f64 = rng.gen_range(-1.0..=1.0); + let mut y: f64 = rng.gen_range(-1.0..=1.0); + + if x * x + y * y < 1.0 { + inside_circle += 1; + } + + x = (2.0f64 * (i as f64 + rng.gen::()) / SQRT_N as f64) - 1.0; + y = (2.0f64 * (j as f64 + rng.gen::()) / SQRT_N as f64) - 1.0; + + if x * x + y * y < 1.0 { + inside_circle_stratified += 1; + } + } + } + + let n = SQRT_N as f64 * SQRT_N as f64; + + println!( + "regular estimation = {} stratified estimate = {}", + 4.0 * inside_circle as f64 / n, + 4.0 * inside_circle_stratified as f64 / n + ); +}