| Crates.io | squares |
| lib.rs | squares |
| version | 0.1.1 |
| created_at | 2024-10-21 22:46:12.781319+00 |
| updated_at | 2024-10-21 22:51:41.503586+00 |
| description | A Counter-RNG faster than Philox |
| homepage | |
| repository | |
| max_upload_size | |
| id | 1418014 |
| size | 14,954 |
Implementation of the Squares CBRNG
Counter-based RNGs are non-serial: you can jump to any index in the RNG sequence. This is especially useful in parallel / distributed contexts
Squares is the fastest known CBRNG, and has higher quality than Philox at 2x speed
Squares is still slower than serial RNGs
Provides 2^64 outputs per key
This crate is no_std, and all functions are const
CBRNGs are stateless. A key is like a seed.
let r32 = squares::u32(key, idx);
let r64 = squares::u64(key, idx);
Squares keys are not arbitrary! Many bit patterns can lead to poor output quality.
The key function makes an admissible Squares key from a "seed" index, which has no restrictions.
let key = squares::key(239482304);
For a manual key, see Key::checked and Key::unchecked.
rand CompatibilityEnable the rand feature to expose Squares, an RNG struct compatible with the rand crates.
Results will vary. On my laptop (M1 Max):
| fn | time | per core |
|---|---|---|
u32 |
1.29ns |
3.10 GB/s |
u64 |
1.65ns |
4.85 GB/s |
key |
24.5ns |
40.8 M/s |
MIT OR Apache-2.0