Struct Bernoulli

pub struct Bernoulli { /* private fields */ }

The Bernoulli distribution Bernoulli(p).

This distribution describes a single boolean random variable, which is true with probability p and false with probability 1 - p. It is a special case of the Binomial distribution with n = 1.

Plot

The following plot shows the Bernoulli distribution with p = 0.1, p = 0.5, and p = 0.9.

Bernoulli distribution

Example

use rand::distr::{Bernoulli, Distribution};

let d = Bernoulli::new(0.3).unwrap();
let v = d.sample(&mut rand::rng());
println!("{} is from a Bernoulli distribution", v);

Precision

This Bernoulli distribution uses 64 bits from the RNG (a u64), so only probabilities that are multiples of 2-64 can be represented.

Implementations

impl Bernoulli

fn new(p: f64) -> Result<Bernoulli, BernoulliError>

Construct a new Bernoulli with the given probability of success p.

Precision

For p = 1.0, the resulting distribution will always generate true. For p = 0.0, the resulting distribution will always generate false.

This method is accurate for any input p in the range [0, 1] which is a multiple of 2-64. (Note that not all multiples of 2-64 in [0, 1] can be represented as a f64.)

fn from_ratio(numerator: u32, denominator: u32) -> Result<Bernoulli, BernoulliError>

Construct a new Bernoulli with the probability of success of numerator-in-denominator. I.e. new_ratio(2, 3) will return a Bernoulli with a 2-in-3 chance, or about 67%, of returning true.

return true. If numerator == 0 it will always return false. For numerator > denominator and denominator == 0, this returns an error. Otherwise, for numerator == denominator, samples are always true; for numerator == 0 samples are always false.

fn p(&self) -> f64

Returns the probability (p) of the distribution.

This value may differ slightly from the input due to loss of precision.

Trait Implementations

impl Clone for Bernoulli

fn clone(&self) -> Bernoulli

impl Copy for Bernoulli

impl Debug for Bernoulli

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

impl Distribution<bool> for Bernoulli

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

impl PartialEq for Bernoulli

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

impl Serialize for Bernoulli

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

impl StructuralPartialEq for Bernoulli

impl<'de> Deserialize<'de> for Bernoulli

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

Auto Trait Implementations

impl Freeze for Bernoulli

impl RefUnwindSafe for Bernoulli

impl Send for Bernoulli

impl Sync for Bernoulli

impl Unpin for Bernoulli

impl UnsafeUnpin for Bernoulli

impl UnwindSafe for Bernoulli

Blanket Implementations

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

fn type_id(&self) -> TypeId

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

fn borrow(&self) -> &T

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

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

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

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

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

impl<T> From<T> for Bernoulli

fn from(t: T) -> T

Returns the argument unchanged.

impl<T> ToOwned for Bernoulli where T: Clone,

type Owned = T;
fn to_owned(&self) -> T
fn clone_into(&self, target: &mut T)

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

fn into(self) -> U

Calls U::from(self).

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

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

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

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

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