rand_distr

Struct Zeta

Source
pub struct Zeta<F>{ /* private fields */ }
Expand description

The Zeta distribution Zeta(s).

The Zeta distribution is a discrete probability distribution with parameter s. It is a special case of the Zipf distribution with n = ∞. It is also known as the discrete Pareto, Riemann-Zeta, Zipf, or Zipf–Estoup distribution.

§Density function

f(k) = k^(-s) / ζ(s) for k >= 1, where ζ is the Riemann zeta function.

§Plot

The following plot illustrates the zeta distribution for various values of s.

Zeta distribution

§Example

use rand::prelude::*;
use rand_distr::Zeta;

let val: f64 = rand::rng().sample(Zeta::new(1.5).unwrap());
println!("{}", val);

§Integer vs FP return type

This implementation uses floating-point (FP) logic internally, which can potentially generate very large samples (exceeding e.g. u64::MAX).

It is safe to cast such results to an integer type using as (e.g. distr.sample(&mut rng) as u64), since such casts are saturating (e.g. 2f64.powi(64) as u64 == u64::MAX). It is up to the user to determine whether this potential loss of accuracy is acceptable (this determination may depend on the distribution’s parameters).

§Notes

The zeta distribution has no upper limit. Sampled values may be infinite. In particular, a value of infinity might be returned for the following reasons:

  1. it is the best representation in the type F of the actual sample.
  2. to prevent infinite loops for very small s.

§Implementation details

We are using the algorithm from Non-Uniform Random Variate Generation, Section 6.1, page 551.

Implementations§

Source§

impl<F> Zeta<F>

Source

pub fn new(s: F) -> Result<Zeta<F>, Error>

Construct a new Zeta distribution with given s parameter.

Trait Implementations§

Source§

impl<F> Clone for Zeta<F>

Source§

fn clone(&self) -> Zeta<F>

Returns a copy 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<F> Debug for Zeta<F>

Source§

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

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

impl<F> Distribution<F> for Zeta<F>

Source§

fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> F

Generate a random value of T, using rng as the source of randomness.
Source§

fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
where R: Rng, Self: Sized,

Create an iterator that generates random values of T, using rng as the source of randomness. Read more
Source§

fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
where F: Fn(T) -> S, Self: Sized,

Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
Source§

impl<F> PartialEq for Zeta<F>

Source§

fn eq(&self, other: &Zeta<F>) -> 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<F> Copy for Zeta<F>

Source§

impl<F> StructuralPartialEq for Zeta<F>

Auto Trait Implementations§

§

impl<F> Freeze for Zeta<F>
where F: Freeze,

§

impl<F> RefUnwindSafe for Zeta<F>
where F: RefUnwindSafe,

§

impl<F> Send for Zeta<F>
where F: Send,

§

impl<F> Sync for Zeta<F>
where F: Sync,

§

impl<F> Unpin for Zeta<F>
where F: Unpin,

§

impl<F> UnwindSafe for Zeta<F>
where F: UnwindSafe,

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, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V