pub struct XorShift128p(/* private fields */);
Expand description
The XorShift128+
PRNG.
It has a 128-bit state and generates 64-bit numbers.
It offers a good balance between quality, speed and state size, and
has statistical properties than XorShift128
.
Implementations§
Source§impl XorShift128p
impl XorShift128p
Sourcepub const fn new(seeds: [u64; 2]) -> Self
pub const fn new(seeds: [u64; 2]) -> Self
Returns a seeded XorShift128+
generator from the given 2 × 64-bit seeds.
If the seed is 0
, the default seed is used instead.
Sourcepub const fn new_unchecked(seeds: [u64; 2]) -> Self
pub const fn new_unchecked(seeds: [u64; 2]) -> Self
Returns a seeded XorShift128p
generator from the given 8-bit seed,
unchecked.
The seeds must not be all 0
, otherwise every result will also be 0
.
§Panics
Panics in debug if the seeds are all 0
.
Sourcepub const fn inner_state(self) -> [u64; 2]
pub const fn inner_state(self) -> [u64; 2]
Returns the PRNG’s inner state as a raw snapshot.
Sourcepub const fn from_state(state: [u64; 2]) -> Self
pub const fn from_state(state: [u64; 2]) -> Self
Restores the PRNG from the given state.
Sourcepub const fn current_u64(&self) -> u64
pub const fn current_u64(&self) -> u64
Returns the current random u64
.
Sourcepub const fn peek_next_state(&self) -> Self
pub const fn peek_next_state(&self) -> Self
Returns a copy of the next new random state.
Sourcepub const fn own_next_u64(self) -> Own<Self, u64>
pub const fn own_next_u64(self) -> Own<Self, u64>
Returns both the next random state and the u64
value.
Source§impl XorShift128p
§Extra constructors
impl XorShift128p
§Extra constructors
Sourcepub const fn new1_u128(seed: u128) -> Self
Available on crate feature split
only.
pub const fn new1_u128(seed: u128) -> Self
split
only.Returns a seeded XorShift128+
generator from the given 128-bit seed.
The seeds will be split in little endian order.
Sourcepub const fn new2_u64(seeds: [u64; 2]) -> Self
pub const fn new2_u64(seeds: [u64; 2]) -> Self
Returns a seeded XorShift128+
generator from the given 2 × 64-bit seeds.
This is an alias of new
.
Sourcepub const fn new4_u32(seeds: [u32; 4]) -> Self
Available on crate feature join
only.
pub const fn new4_u32(seeds: [u32; 4]) -> Self
join
only.Returns a seeded XorShift128+
generator from the given 4 × 32-bit seeds.
The seeds will be joined in little endian order.
Trait Implementations§
Source§impl Clone for XorShift128p
impl Clone for XorShift128p
Source§fn clone(&self) -> XorShift128p
fn clone(&self) -> XorShift128p
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl ConstDefault for XorShift128p
Creates a new PRNG initialized with the default fixed seed.
impl ConstDefault for XorShift128p
Creates a new PRNG initialized with the default fixed seed.
Source§impl Debug for XorShift128p
impl Debug for XorShift128p
Source§impl Default for XorShift128p
Creates a new PRNG initialized with the default fixed seed.
impl Default for XorShift128p
Creates a new PRNG initialized with the default fixed seed.
Source§impl PartialEq for XorShift128p
impl PartialEq for XorShift128p
Source§impl RngCore for XorShift128p
Available on crate feature dep_rand_core
only.
impl RngCore for XorShift128p
dep_rand_core
only.Source§impl SeedableRng for XorShift128p
Available on crate feature dep_rand_core
only.
impl SeedableRng for XorShift128p
dep_rand_core
only.Source§fn from_seed(seed: Self::Seed) -> Self
fn from_seed(seed: Self::Seed) -> Self
When seeded with zero this implementation uses the default seed value as the cold path.
Source§type Seed = [u8; 16]
type Seed = [u8; 16]
u8
arrays (we recommend [u8; N]
for some N
). Read moreSource§fn seed_from_u64(state: u64) -> Self
fn seed_from_u64(state: u64) -> Self
u64
seed. Read moreSource§fn from_rng(rng: &mut impl RngCore) -> Self
fn from_rng(rng: &mut impl RngCore) -> Self
Rng
. Read moreSource§fn try_from_rng<R>(rng: &mut R) -> Result<Self, <R as TryRngCore>::Error> ⓘwhere
R: TryRngCore,
fn try_from_rng<R>(rng: &mut R) -> Result<Self, <R as TryRngCore>::Error> ⓘwhere
R: TryRngCore,
Rng
. Read moreimpl Copy for XorShift128p
impl Eq for XorShift128p
impl StructuralPartialEq for XorShift128p
Auto Trait Implementations§
impl Freeze for XorShift128p
impl RefUnwindSafe for XorShift128p
impl Send for XorShift128p
impl Sync for XorShift128p
impl Unpin for XorShift128p
impl UnwindSafe for XorShift128p
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> ByteSized for T
impl<T> ByteSized for T
Source§const BYTE_ALIGN: usize = _
const BYTE_ALIGN: usize = _
Source§fn byte_align(&self) -> usize
fn byte_align(&self) -> usize
Source§fn ptr_size_ratio(&self) -> [usize; 2]
fn ptr_size_ratio(&self) -> [usize; 2]
Source§impl<T, R> Chain<R> for Twhere
T: ?Sized,
impl<T, R> Chain<R> for Twhere
T: ?Sized,
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.Source§impl<T> ExtAny for T
impl<T> ExtAny for T
Source§fn type_hash_with<H: Hasher>(&self, hasher: H) -> u64
fn type_hash_with<H: Hasher>(&self, hasher: H) -> u64
TypeId
of Self
using a custom hasher.Source§fn as_any_mut(&mut self) -> &mut dyn Anywhere
Self: Sized,
fn as_any_mut(&mut self) -> &mut dyn Anywhere
Self: Sized,
Source§impl<T> ExtMem for Twhere
T: ?Sized,
impl<T> ExtMem for Twhere
T: ?Sized,
Source§const NEEDS_DROP: bool = _
const NEEDS_DROP: bool = _
Source§fn mem_align_of<T>() -> usize
fn mem_align_of<T>() -> usize
Source§fn mem_align_of_val(&self) -> usize
fn mem_align_of_val(&self) -> usize
Source§fn mem_size_of<T>() -> usize
fn mem_size_of<T>() -> usize
Source§fn mem_size_of_val(&self) -> usize
fn mem_size_of_val(&self) -> usize
Source§fn mem_needs_drop(&self) -> bool
fn mem_needs_drop(&self) -> bool
true
if dropping values of this type matters. Read moreSource§fn mem_forget(self)where
Self: Sized,
fn mem_forget(self)where
Self: Sized,
self
without running its destructor. Read moreSource§fn mem_replace(&mut self, other: Self) -> Selfwhere
Self: Sized,
fn mem_replace(&mut self, other: Self) -> Selfwhere
Self: Sized,
Source§unsafe fn mem_zeroed<T>() -> T
unsafe fn mem_zeroed<T>() -> T
unsafe_layout
only.T
represented by the all-zero byte-pattern. Read moreSource§unsafe fn mem_transmute_copy<Src, Dst>(src: &Src) -> Dst
unsafe fn mem_transmute_copy<Src, Dst>(src: &Src) -> Dst
unsafe_layout
only.T
represented by the all-zero byte-pattern. Read moreSource§fn mem_as_bytes(&self) -> &[u8] ⓘ
fn mem_as_bytes(&self) -> &[u8] ⓘ
unsafe_slice
only.§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> Hook for T
impl<T> Hook for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T, U> ToSample<U> for Twhere
U: FromSample<T>,
impl<T, U> ToSample<U> for Twhere
U: FromSample<T>,
fn to_sample_(self) -> U
Source§impl<R> TryRngCore for R
impl<R> TryRngCore for R
Source§type Error = Infallible
type Error = Infallible
Source§fn try_next_u32(&mut self) -> Result<u32, <R as TryRngCore>::Error> ⓘ
fn try_next_u32(&mut self) -> Result<u32, <R as TryRngCore>::Error> ⓘ
u32
.Source§fn try_next_u64(&mut self) -> Result<u64, <R as TryRngCore>::Error> ⓘ
fn try_next_u64(&mut self) -> Result<u64, <R as TryRngCore>::Error> ⓘ
u64
.Source§fn try_fill_bytes(
&mut self,
dst: &mut [u8],
) -> Result<(), <R as TryRngCore>::Error> ⓘ
fn try_fill_bytes( &mut self, dst: &mut [u8], ) -> Result<(), <R as TryRngCore>::Error> ⓘ
dest
entirely with random data.Source§fn unwrap_mut(&mut self) -> UnwrapMut<'_, Self>
fn unwrap_mut(&mut self) -> UnwrapMut<'_, Self>
UnwrapMut
wrapper.