Skip to content

Commit 189f53e

Browse files
committed
Unit sphere and circle: remove cached Uniform distribution
Reduces size and improves performance in my bench
1 parent 2573e83 commit 189f53e

File tree

2 files changed

+9
-11
lines changed

2 files changed

+9
-11
lines changed

src/distributions/unit_circle.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,27 +29,26 @@ use distributions::{Distribution, Uniform};
2929
/// NBS Appl. Math. Ser., No. 12. Washington, DC: U.S. Government Printing
3030
/// Office, pp. 36-38.
3131
#[derive(Clone, Copy, Debug)]
32-
pub struct UnitCircle {
33-
uniform: Uniform<f64>,
34-
}
32+
pub struct UnitCircle;
3533

3634
impl UnitCircle {
3735
/// Construct a new `UnitCircle` distribution.
3836
#[inline]
3937
pub fn new() -> UnitCircle {
40-
UnitCircle { uniform: Uniform::new(-1., 1.) }
38+
UnitCircle
4139
}
4240
}
4341

4442
impl Distribution<[f64; 2]> for UnitCircle {
4543
#[inline]
4644
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> [f64; 2] {
45+
let uniform = Uniform::new(-1., 1.);
4746
let mut x1;
4847
let mut x2;
4948
let mut sum;
5049
loop {
51-
x1 = self.uniform.sample(rng);
52-
x2 = self.uniform.sample(rng);
50+
x1 = uniform.sample(rng);
51+
x2 = uniform.sample(rng);
5352
sum = x1*x1 + x2*x2;
5453
if sum < 1. {
5554
break;

src/distributions/unit_sphere.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,23 +28,22 @@ use distributions::{Distribution, Uniform};
2828
/// Sphere.*](https://doi.org/10.1214/aoms/1177692644)
2929
/// Ann. Math. Statist. 43, no. 2, 645--646.
3030
#[derive(Clone, Copy, Debug)]
31-
pub struct UnitSphereSurface {
32-
uniform: Uniform<f64>,
33-
}
31+
pub struct UnitSphereSurface;
3432

3533
impl UnitSphereSurface {
3634
/// Construct a new `UnitSphereSurface` distribution.
3735
#[inline]
3836
pub fn new() -> UnitSphereSurface {
39-
UnitSphereSurface { uniform: Uniform::new(-1., 1.) }
37+
UnitSphereSurface
4038
}
4139
}
4240

4341
impl Distribution<[f64; 3]> for UnitSphereSurface {
4442
#[inline]
4543
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> [f64; 3] {
44+
let uniform = Uniform::new(-1., 1.);
4645
loop {
47-
let (x1, x2) = (self.uniform.sample(rng), self.uniform.sample(rng));
46+
let (x1, x2) = (uniform.sample(rng), uniform.sample(rng));
4847
let sum = x1*x1 + x2*x2;
4948
if sum >= 1. {
5049
continue;

0 commit comments

Comments
 (0)