Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/engusmaze/frand
Blazingly Fast Pseudo Random Number Generator written in Rust
https://github.com/engusmaze/frand
no-std prng rand random random-generation rust rust-lang
Last synced: about 1 month ago
JSON representation
Blazingly Fast Pseudo Random Number Generator written in Rust
- Host: GitHub
- URL: https://github.com/engusmaze/frand
- Owner: engusmaze
- License: apache-2.0
- Created: 2023-06-30T16:12:54.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-09-21T12:40:27.000Z (about 2 months ago)
- Last Synced: 2024-10-01T17:08:35.141Z (about 2 months ago)
- Topics: no-std, prng, rand, random, random-generation, rust, rust-lang
- Language: Rust
- Homepage: https://crates.io/crates/frand
- Size: 71.3 KB
- Stars: 17
- Watchers: 2
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# FRand
[![Crate](https://img.shields.io/crates/v/frand.svg)](https://crates.io/crates/frand)
**FRand** is a blazingly fast, small, and simple pseudo-random number generator (PRNG) written in Rust. The advantage of using FRand is that it can produce more random numbers per second than other libraries. It also produces high-quality random numbers using a fast **non-cryptographic** hashing algorithm.
To find the best constants for the algorithm, I used an automated program that tried many random constants per second and measured the bias of the output. The bias was estimated using the avalanche effect, which is a property of good hash functions that ensures that a small change in the input produces a large change in the output. The program selected the constants that minimized the bias and maximized the randomness.
**FRand** is really simple to use. Here is a simple example of how to use FRand to generate a random float:
```rs
use frand::Rand;let mut rng = Rand::new();
println!("{}", rng.gen::());
```## Speeds
### u64
| rand::ThreadRng | rand::SmallRng | fastrand::Rng | frand::Rand |
| :-------------: | :------------: | :-----------: | :---------: |
| 1.00x | 3.74x | 5.80x | 6.09x |### f64
| rand::ThreadRng | rand::SmallRng | fastrand::Rng | frand::Rand |
| :-------------: | :------------: | :-----------: | :---------: |
| 1.00x | 3.79x | 2.34x | 5.57x |### u128
| rand::ThreadRng | rand::SmallRng | fastrand::Rng | frand::Rand |
| :-------------: | :------------: | :-----------: | :---------: |
| 1.00x | 2.15x | 6.79x | 7.24x |If you have suggestions on how to improve this library, you can contribute to this project!