{
seed: AtomicI64,
gaussian_source: MarsagliaPolarGaussian,
}
impl RandomSource for LegacyRandomSource {
fn next_gaussian(&mut self) -> f64 {
self.gaussian_source.next_gaussian(self) // errors
}
...
}
pub struct MarsagliaPolarGaussian {
next_next_gaussian: f64,
have_next_next_gaussian: bool,
}
impl MarsagliaPolarGaussian {
pub fn next_gaussian(&mut self, random_source: &mut impl RandomSource) -> f64 {
...
d = 2.0 * random_source.next_double() - 1.0;
e = 2.0 * random_source.next_double() - 1.0;
...
}
}
}
тут ошибка из-за того что MarsagliaPolarGaussian может из LegacyRandomSource получить референс на самого себя, как я понял
Зачем тебе в MarsagliaPolarGaussian два random source'а?
как часть алгоритма
Тут бы как-то избавиться от ссылки на себя, я бы декомпозировал на "простой" и "сложный" (составной) рандом, сложный бы как раз gaussian генерировал, а простой double
Обсуждают сегодня