diff options
Diffstat (limited to 'rand/rand_xoshiro/src/lib.rs')
-rw-r--r-- | rand/rand_xoshiro/src/lib.rs | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/rand/rand_xoshiro/src/lib.rs b/rand/rand_xoshiro/src/lib.rs new file mode 100644 index 0000000..634db31 --- /dev/null +++ b/rand/rand_xoshiro/src/lib.rs @@ -0,0 +1,106 @@ +// Copyright 2018 Developers of the Rand project. +// +// 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. + +//! This crate implements the [xoshiro] family of pseudorandom number generators +//! designed by David Blackman and Sebastiano Vigna. They feature high +//! perfomance and a small state and superseed the previous xorshift-based +//! generators. However, they are no cryptographically secure and their output +//! can be predicted by observing a few samples. +//! +//! The following generators are implemented: +//! +//! # 64-bit generators +//! - [`Xoshiro256StarStar`]: Recommended for all purposes. Excellent speed and +//! a state space (256 bits) large enough for any parallel application. +//! - [`Xoshiro256Plus`]: Recommended for generating 64-bit floating-point +//! numbers. About 15% faster than `Xoshiro256StarStar`, but has a [low linear +//! complexity] in the lowest bits (which are discarded when generating +//! floats), making it fail linearity tests. This is unlikely to have any +//! impact in practise. +//! - [`Xoroshiro128StarStar`]: An alternative to `Xoshiro256StarStar`, having +//! the same speed but using half the state. Only suited for low-scale parallel +//! applications. +//! - [`Xoroshiro128Plus`]: An alternative to `Xoshiro256Plus`, having the same +//! speed but using half the state. Only suited for low-scale parallel +//! applications. Has a [low linear complexity] in the lowest bits (which are +//! discarded when generating floats), making it fail linearity tests. This is +//! unlikely to have any impact in practise. +//! - [`Xoshiro512StarStar`]: An alternative to `Xoshiro256StarStar` with more +//! state and the same speed. +//! - [`Xoshiro512Plus`]: An alternative to `Xoshiro512Plus` with more +//! state and the same speed. Has a [low linear complexity] in the lowest bits +//! (which are discarded when generating floats), making it fail linearity +//! tests. This is unlikely to have any impact in practise. +//! - [`SplitMix64`]: Recommended for initializing generators of the xoshiro +//! familiy from a 64-bit seed. Used for implementing `seed_from_u64`. +//! +//! # 32-bit generators +//! - [`Xoshiro128StarStar`]: Recommended for all purposes. Excellent speed. +//! - [`Xoshiro128Plus`]: Recommended for generating 32-bit floating-point +//! numbers. Faster than `Xoshiro128StarStar`, but has a [low linear +//! complexity] in the lowest bits (which are discarded when generating +//! floats), making it fail linearity tests. This is unlikely to have any +//! impact in practise. +//! - [`Xoroshiro64StarStar`]: An alternative to `Xoshiro128StarStar`, having +//! the same speed but using half the state. +//! - [`Xoroshiro64Star`]: An alternative to `Xoshiro128Plus`, having the +//! same speed but using half the state. Has a [low linear complexity] in the +//! lowest bits (which are discarded when generating floats), making it fail +//! linearity tests. This is unlikely to have any impact in practise. +//! +//! [xoshiro]: http://xoshiro.di.unimi.it/ +//! [low linear complexity]: http://xoshiro.di.unimi.it/lowcomp.php +//! [`Xoshiro256StarStar`]: ./struct.Xoshiro256StarStar.html +//! [`Xoshiro256Plus`]: ./struct.Xoshiro256Plus.html +//! [`Xoroshiro128StarStar`]: ./struct.Xoroshiro128StarStar.html +//! [`Xoroshiro128Plus`]: ./struct.Xoroshiro128Plus.html +//! [`Xoshiro512StarStar`]: ./struct.Xoshiro512StarStar.html +//! [`Xoshiro512Plus`]: ./struct.Xoshiro512Plus.html +//! [`SplitMix64`]: ./struct.SplitMix64.html +//! [`Xoshiro128StarStar`]: ./struct.Xoshiro128StarStar.html +//! [`Xoshiro128Plus`]: ./struct.Xoshiro128Plus.html +//! [`Xoroshiro64StarStar`]: ./struct.Xoroshiro64StarStar.html +//! [`Xoroshiro64Star`]: ./struct.Xoroshiro64Star.html + +#![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk.png", + html_favicon_url = "https://www.rust-lang.org/favicon.ico", + html_root_url = "https://docs.rs/rand_xoshiro/0.1.0")] + +#![deny(missing_docs)] +#![deny(missing_debug_implementations)] +#![cfg_attr(feature = "cargo-clippy", allow(unreadable_literal))] +#![no_std] +extern crate byteorder; +pub extern crate rand_core; + +#[macro_use] +mod common; +mod splitmix64; +mod xoshiro128starstar; +mod xoshiro128plus; +mod xoshiro256starstar; +mod xoshiro256plus; +mod xoshiro512starstar; +mod xoshiro512plus; +mod xoroshiro128plus; +mod xoroshiro128starstar; +mod xoroshiro64starstar; +mod xoroshiro64star; + +pub use splitmix64::SplitMix64; +pub use xoshiro128starstar::Xoshiro128StarStar; +pub use xoshiro128plus::Xoshiro128Plus; +pub use xoshiro256starstar::Xoshiro256StarStar; +pub use xoshiro256plus::Xoshiro256Plus; +pub use common::Seed512; +pub use xoshiro512starstar::Xoshiro512StarStar; +pub use xoshiro512plus::Xoshiro512Plus; +pub use xoroshiro128plus::Xoroshiro128Plus; +pub use xoroshiro128starstar::Xoroshiro128StarStar; +pub use xoroshiro64starstar::Xoroshiro64StarStar; +pub use xoroshiro64star::Xoroshiro64Star; |