#rng #random #rand-rng #rand #numbers #algorithm #mt

no-std rand_mt

Reference Mersenne Twister random number generators

9 stable releases

4.2.2 Jun 2, 2023
4.2.1 Oct 11, 2022
4.2.0 Aug 9, 2022
4.1.3 Jul 31, 2022
2.0.0 Mar 15, 2020

#76 in Algorithms

Download history 339/week @ 2023-11-23 358/week @ 2023-11-30 371/week @ 2023-12-07 378/week @ 2023-12-14 369/week @ 2023-12-21 457/week @ 2023-12-28 574/week @ 2024-01-04 326/week @ 2024-01-11 674/week @ 2024-01-18 577/week @ 2024-01-25 1109/week @ 2024-02-01 338/week @ 2024-02-08 447/week @ 2024-02-15 599/week @ 2024-02-22 914/week @ 2024-02-29 455/week @ 2024-03-07

2,442 downloads per month
Used in 9 crates (6 directly)

MIT/Apache

160KB
5K SLoC

rand_mt

GitHub Actions Code Coverage Discord Twitter
Crate API API trunk

Implements a selection of Mersenne Twister random number generators.

A very fast random number generator of period 219937-1. (Makoto Matsumoto, 1997).

The Mersenne Twister algorithms are not suitable for cryptographic uses, but are ubiquitous. See the Mersenne Twister website. A variant of Mersenne Twister is the default PRNG in Ruby.

This crate optionally depends on rand_core and implements RngCore on the RNGs in this crate.

Usage

Add this to your Cargo.toml:

[dependencies]
rand_mt = "4.2.2"

Then create a RNG like:

use rand_mt::Mt64;

let mut rng = Mt64::new_unseeded();
assert_ne!(rng.next_u64(), rng.next_u64());

Crate Features

rand_mt is no_std compatible. rand_mt has several optional features that are enabled by default:

  • rand-traits - Enables a dependency on rand_core. Activating this feature implements RngCore and SeedableRng on the RNGs in this crate.
  • std - Enables a dependency on the Rust Standard Library. Activating this feature enables std::error::Error impls on error types in this crate.

Mersenne Twister requires approximately 2.5 kilobytes of internal state. To make the RNGs implemented in this crate practical to embed in other structs, you may wish to store the RNG in a Box.

Minimum Supported Rust Version

This crate requires at least Rust 1.47.0. This version can be bumped in minor releases.

License

rand_mt is distributed under the terms of either the MIT License or the Apache License (Version 2.0).

rand_mt is derived from rust-mersenne-twister @ 1.1.1 which is Copyright (c) 2015 rust-mersenne-twister developers.

Dependencies