[−][src]Struct rand_isaac::isaac64::Isaac64Core
The core of Isaac64Rng
, used with BlockRng
.
Methods
impl Isaac64Core
[src]
pub fn new_from_u64(seed: u64) -> Self
[src]
use SeedableRng::seed_from_u64 instead
Create an ISAAC-64 random number generator using an u64
as seed.
If seed == 0
this will produce the same stream of random numbers as
the reference implementation when used unseeded.
Trait Implementations
impl Debug for Isaac64Core
[src]
impl Clone for Isaac64Core
[src]
fn clone(&self) -> Isaac64Core
[src]
fn clone_from(&mut self, source: &Self)
1.0.0[src]
impl SeedableRng for Isaac64Core
[src]
type Seed = [u8; 32]
Seed type, which is restricted to types mutably-dereferencable as u8
arrays (we recommend [u8; N]
for some N
). Read more
fn from_seed(seed: Self::Seed) -> Self
[src]
fn seed_from_u64(seed: u64) -> Self
[src]
fn from_rng<R: RngCore>(rng: R) -> Result<Self, Error>
[src]
impl BlockRngCore for Isaac64Core
[src]
type Item = u64
Results element type, e.g. u32
.
type Results = IsaacArray<Self::Item>
Results type. This is the 'block' an RNG implementing BlockRngCore
generates, which will usually be an array like [u32; 16]
. Read more
fn generate(&mut self, results: &mut IsaacArray<Self::Item>)
[src]
Refills the output buffer, results
. See also the pseudocode desciption
of the algorithm in the Isaac64Rng
documentation.
Optimisations used (similar to the reference implementation):
- The loop is unrolled 4 times, once for every constant of mix().
- The contents of the main loop are moved to a function
rngstep
, to reduce code duplication. - We use local variables for a and b, which helps with optimisations.
- We split the main loop in two, one that operates over 0..128 and one
over 128..256. This way we can optimise out the addition and modulus
from
s[i+128 mod 256]
. - We maintain one index
i
and addm
orm2
as base (m2 for thes[i+128 mod 256]
), relying on the optimizer to turn it into pointer arithmetic. - We fill
results
backwards. The reference implementation reads values fromresults
in reverse. We read them in the normal direction, to makefill_bytes
a memcopy. To maintain compatibility we fill in reverse.
Auto Trait Implementations
impl Unpin for Isaac64Core
impl Send for Isaac64Core
impl Sync for Isaac64Core
impl UnwindSafe for Isaac64Core
impl RefUnwindSafe for Isaac64Core
Blanket Implementations
impl<T> From<T> for T
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,