Sfc64

Struct Sfc64 

Source
pub struct Sfc64 { /* private fields */ }
Expand description

A sfc64 random number generator.

The sfc64 algorithm is not suitable for cryptographic uses but is very fast. This algorithm has a 256-bit state and outputs 64-bit random numbers. The average period of this algorithm is approximately 2255, and the minimum period is greater than or equal to 264.

The algorithm used here is translated from the reference implementation provided by PractRand version pre0.95, which is licensed under the public domain.

§Examples

let mut rng = Sfc64::from_seed([0; 24]);
assert_eq!(rng.next_u64(), 0xdb90_9c81_8901_599d);

Implementations§

Source§

impl Sfc64

Source

pub fn new(a: u64, b: u64, c: u64, rounds: Option<u64>) -> Self

Creates a new Sfc64 using the given seeds.

If rounds is None, the state is mixed up 18 rounds during initialization.

§Examples
let mut rng = Sfc64::new(0, 0, 0, None);
assert_eq!(rng.next_u64(), 0xdb90_9c81_8901_599d);
Source

pub fn new_u64(seed: u64, rounds: Option<u64>) -> Self

Creates a new Sfc64 using a u64 seed.

If rounds is None, the state is mixed up 12 rounds during initialization.

Note that the result of this method is different from the result of Sfc64::seed_from_u64.

§Examples
let mut rng = Sfc64::new_u64(0, None);
assert_eq!(rng.next_u64(), 0x3acf_a029_e3cc_6041);

Trait Implementations§

Source§

impl Clone for Sfc64

Source§

fn clone(&self) -> Sfc64

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Sfc64

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Sfc64

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Sfc64

Source§

fn eq(&self, other: &Sfc64) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl RngCore for Sfc64

Source§

fn next_u32(&mut self) -> u32

Return the next random u32. Read more
Source§

fn next_u64(&mut self) -> u64

Return the next random u64. Read more
Source§

fn fill_bytes(&mut self, dst: &mut [u8])

Fill dest with random data. Read more
Source§

impl SeedableRng for Sfc64

Source§

type Seed = [u8; 24]

Seed type, which is restricted to types mutably-dereferenceable as u8 arrays (we recommend [u8; N] for some N). Read more
Source§

fn from_seed(seed: Self::Seed) -> Self

Create a new PRNG using the given seed. Read more
Source§

fn seed_from_u64(state: u64) -> Self

Create a new PRNG using a u64 seed. Read more
Source§

fn from_rng(rng: &mut impl RngCore) -> Self

Create a new PRNG seeded from an infallible Rng. Read more
Source§

fn try_from_rng<R>(rng: &mut R) -> Result<Self, <R as TryRngCore>::Error>
where R: TryRngCore,

Create a new PRNG seeded from a potentially fallible Rng. Read more
Source§

impl Serialize for Sfc64

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl Eq for Sfc64

Source§

impl StructuralPartialEq for Sfc64

Auto Trait Implementations§

§

impl Freeze for Sfc64

§

impl RefUnwindSafe for Sfc64

§

impl Send for Sfc64

§

impl Sync for Sfc64

§

impl Unpin for Sfc64

§

impl UnwindSafe for Sfc64

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<R> TryRngCore for R
where R: RngCore + ?Sized,

Source§

type Error = Infallible

The type returned in the event of a RNG error.
Source§

fn try_next_u32(&mut self) -> Result<u32, <R as TryRngCore>::Error>

Return the next random u32.
Source§

fn try_next_u64(&mut self) -> Result<u64, <R as TryRngCore>::Error>

Return the next random u64.
Source§

fn try_fill_bytes( &mut self, dst: &mut [u8], ) -> Result<(), <R as TryRngCore>::Error>

Fill dest entirely with random data.
Source§

fn unwrap_err(self) -> UnwrapErr<Self>
where Self: Sized,

Wrap RNG with the UnwrapErr wrapper.
Source§

fn unwrap_mut(&mut self) -> UnwrapMut<'_, Self>

Wrap RNG with the UnwrapMut wrapper.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,