dashu_cmplx/third_party/
rand_v08.rs1use crate::cbig::CBig;
4use crate::third_party::rand::UniformCBig;
5use dashu_float::round::Round;
6use dashu_float::FBig;
7use dashu_int::Word;
8use rand_v08::distributions::{Open01, OpenClosed01, Standard};
9use rand_v08::prelude::Distribution;
10use rand_v08::Rng;
11
12fn bridge<R: Rng + ?Sized>(rng: &mut R) -> impl dashu_int::rand::BitRng + '_ {
13 dashu_int::rand::bridge_v08(rng)
14}
15
16impl<R: Round, const B: Word> Distribution<CBig<R, B>> for UniformCBig<R, B> {
17 #[inline]
18 fn sample<RNG: Rng + ?Sized>(&self, rng: &mut RNG) -> CBig<R, B> {
19 self.sample_cbig(&mut bridge(rng))
20 }
21}
22
23impl<R: Round, const B: Word> Distribution<CBig<R, B>> for Standard {
24 #[inline]
26 fn sample<RNG: Rng + ?Sized>(&self, rng: &mut RNG) -> CBig<R, B> {
27 let re: FBig<R, B> = Standard.sample(rng);
28 let im: FBig<R, B> = Standard.sample(rng);
29 CBig::from_parts(re, im)
30 }
31}
32
33impl<R: Round, const B: Word> Distribution<CBig<R, B>> for Open01 {
34 #[inline]
35 fn sample<RNG: Rng + ?Sized>(&self, rng: &mut RNG) -> CBig<R, B> {
36 let re: FBig<R, B> = Open01.sample(rng);
37 let im: FBig<R, B> = Open01.sample(rng);
38 CBig::from_parts(re, im)
39 }
40}
41
42impl<R: Round, const B: Word> Distribution<CBig<R, B>> for OpenClosed01 {
43 #[inline]
44 fn sample<RNG: Rng + ?Sized>(&self, rng: &mut RNG) -> CBig<R, B> {
45 let re: FBig<R, B> = OpenClosed01.sample(rng);
46 let im: FBig<R, B> = OpenClosed01.sample(rng);
47 CBig::from_parts(re, im)
48 }
49}