-
-
Notifications
You must be signed in to change notification settings - Fork 486
Update READMEs. #328
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Update READMEs. #328
Changes from all commits
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
8ac8ac8
Update READMEs.
dhardy d5d5ba6
Doc: big update to library doc
dhardy eccc5c9
Lib doc: update in response to review
dhardy 57905a3
Travis: build doc for all sub-crates
dhardy 8b65ebe
Extract examples from lib doc
dhardy be98c64
Doc: fix lots of links
dhardy 4650ed8
Readme: link both generated doc sites
dhardy 5271ffb
Disable examples on no-std
dhardy File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,52 @@ | ||
| // Copyright 2013-2018 The Rust Project Developers. See the COPYRIGHT | ||
| // file at the top-level directory of this distribution and at | ||
| // https://rust-lang.org/COPYRIGHT. | ||
| // | ||
| // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or | ||
| // https://www.apache.org/licenses/LICENSE-2.0> or the MIT license | ||
| // <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your | ||
| // option. This file may not be copied, modified, or distributed | ||
| // except according to those terms. | ||
|
|
||
| //! # Monte Carlo estimation of π | ||
| //! | ||
| //! Imagine that we have a square with sides of length 2 and a unit circle | ||
| //! (radius = 1), both centered at the origin. The areas are: | ||
| //! | ||
| //! ```text | ||
| //! area of circle = πr² = π * r * r = π | ||
| //! area of square = 2² = 4 | ||
| //! ``` | ||
| //! | ||
| //! The circle is entirely within the square, so if we sample many points | ||
| //! randomly from the square, roughly π / 4 of them should be inside the circle. | ||
| //! | ||
| //! We can use the above fact to estimate the value of π: pick many points in | ||
| //! the square at random, calculate the fraction that fall within the circle, | ||
| //! and multiply this fraction by 4. | ||
|
|
||
| #![cfg(feature="std")] | ||
|
|
||
|
|
||
| extern crate rand; | ||
|
|
||
| use rand::distributions::{Distribution, Range}; | ||
|
|
||
| fn main() { | ||
| let range = Range::new(-1.0f64, 1.0); | ||
| let mut rng = rand::thread_rng(); | ||
|
|
||
| let total = 1_000_000; | ||
| let mut in_circle = 0; | ||
|
|
||
| for _ in 0..total { | ||
| let a = range.sample(&mut rng); | ||
| let b = range.sample(&mut rng); | ||
| if a*a + b*b <= 1.0 { | ||
| in_circle += 1; | ||
| } | ||
| } | ||
|
|
||
| // prints something close to 3.14159... | ||
| println!("π is approximately {}", 4. * (in_circle as f64) / (total as f64)); | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,118 @@ | ||
| // Copyright 2013-2018 The Rust Project Developers. See the COPYRIGHT | ||
| // file at the top-level directory of this distribution and at | ||
| // https://rust-lang.org/COPYRIGHT. | ||
| // | ||
| // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or | ||
| // https://www.apache.org/licenses/LICENSE-2.0> or the MIT license | ||
| // <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your | ||
| // option. This file may not be copied, modified, or distributed | ||
| // except according to those terms. | ||
|
|
||
| //! ## Monty Hall Problem | ||
| //! | ||
| //! This is a simulation of the [Monty Hall Problem][]: | ||
| //! | ||
| //! > Suppose you're on a game show, and you're given the choice of three doors: | ||
| //! > Behind one door is a car; behind the others, goats. You pick a door, say | ||
| //! > No. 1, and the host, who knows what's behind the doors, opens another | ||
| //! > door, say No. 3, which has a goat. He then says to you, "Do you want to | ||
| //! > pick door No. 2?" Is it to your advantage to switch your choice? | ||
| //! | ||
| //! The rather unintuitive answer is that you will have a 2/3 chance of winning | ||
| //! if you switch and a 1/3 chance of winning if you don't, so it's better to | ||
| //! switch. | ||
| //! | ||
| //! This program will simulate the game show and with large enough simulation | ||
| //! steps it will indeed confirm that it is better to switch. | ||
| //! | ||
| //! [Monty Hall Problem]: https://en.wikipedia.org/wiki/Monty_Hall_problem | ||
|
|
||
| #![cfg(feature="std")] | ||
|
|
||
|
|
||
| extern crate rand; | ||
|
|
||
| use rand::Rng; | ||
| use rand::distributions::{Distribution, Range}; | ||
| use rand::distributions::range::RangeInt; | ||
|
|
||
| struct SimulationResult { | ||
| win: bool, | ||
| switch: bool, | ||
| } | ||
|
|
||
| // Run a single simulation of the Monty Hall problem. | ||
| fn simulate<R: Rng>(random_door: &Range<RangeInt<u32>>, rng: &mut R) | ||
| -> SimulationResult { | ||
| let car = random_door.sample(rng); | ||
|
|
||
| // This is our initial choice | ||
| let mut choice = random_door.sample(rng); | ||
|
|
||
| // The game host opens a door | ||
| let open = game_host_open(car, choice, rng); | ||
|
|
||
| // Shall we switch? | ||
| let switch = rng.gen(); | ||
| if switch { | ||
| choice = switch_door(choice, open); | ||
| } | ||
|
|
||
| SimulationResult { win: choice == car, switch: switch } | ||
| } | ||
|
|
||
| // Returns the door the game host opens given our choice and knowledge of | ||
| // where the car is. The game host will never open the door with the car. | ||
| fn game_host_open<R: Rng>(car: u32, choice: u32, rng: &mut R) -> u32 { | ||
| let choices = free_doors(&[car, choice]); | ||
| rand::seq::sample_slice(rng, &choices, 1)[0] | ||
| } | ||
|
|
||
| // Returns the door we switch to, given our current choice and | ||
| // the open door. There will only be one valid door. | ||
| fn switch_door(choice: u32, open: u32) -> u32 { | ||
| free_doors(&[choice, open])[0] | ||
| } | ||
|
|
||
| fn free_doors(blocked: &[u32]) -> Vec<u32> { | ||
| (0..3).filter(|x| !blocked.contains(x)).collect() | ||
| } | ||
|
|
||
| fn main() { | ||
| // The estimation will be more accurate with more simulations | ||
| let num_simulations = 10000; | ||
|
|
||
| let mut rng = rand::thread_rng(); | ||
| let random_door = Range::new(0u32, 3); | ||
|
|
||
| let (mut switch_wins, mut switch_losses) = (0, 0); | ||
| let (mut keep_wins, mut keep_losses) = (0, 0); | ||
|
|
||
| println!("Running {} simulations...", num_simulations); | ||
| for _ in 0..num_simulations { | ||
| let result = simulate(&random_door, &mut rng); | ||
|
|
||
| match (result.win, result.switch) { | ||
| (true, true) => switch_wins += 1, | ||
| (true, false) => keep_wins += 1, | ||
| (false, true) => switch_losses += 1, | ||
| (false, false) => keep_losses += 1, | ||
| } | ||
| } | ||
|
|
||
| let total_switches = switch_wins + switch_losses; | ||
| let total_keeps = keep_wins + keep_losses; | ||
|
|
||
| println!("Switched door {} times with {} wins and {} losses", | ||
| total_switches, switch_wins, switch_losses); | ||
|
|
||
| println!("Kept our choice {} times with {} wins and {} losses", | ||
| total_keeps, keep_wins, keep_losses); | ||
|
|
||
| // With a large number of simulations, the values should converge to | ||
| // 0.667 and 0.333 respectively. | ||
| println!("Estimated chance to win if we switch: {}", | ||
| switch_wins as f32 / total_switches as f32); | ||
| println!("Estimated chance to win if we don't: {}", | ||
| keep_wins as f32 / total_keeps as f32); | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This sounds a bit negative. Can you say "Due to {issue-number}"?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It was intended to be, and it's documented in Cargo.toml.
Maybe some day Cargo will have a lot less rough edges. I guess a flexible build/packaging tool turned out to be a considerably more complex than was initially envisaged. For now it still feels like a quick hack in many ways.