@@ -89,8 +89,8 @@ where F: Float + FloatConst, Standard: Distribution<F>
89
89
90
90
// for low expected values use the Knuth method
91
91
if self . lambda < F :: from ( 12.0 ) . unwrap ( ) {
92
- let mut result = F :: zero ( ) ;
93
- let mut p = F :: one ( ) ;
92
+ let mut result = F :: one ( ) ;
93
+ let mut p = rng . gen :: < F > ( ) ;
94
94
while p > self . exp_lambda {
95
95
p = p* rng. gen :: < F > ( ) ;
96
96
result = result + F :: one ( ) ;
@@ -161,10 +161,15 @@ mod test {
161
161
162
162
#[ test]
163
163
fn test_poisson_avg ( ) {
164
- test_poisson_avg_gen :: < f64 > ( 10.0 , 0.5 ) ;
165
- test_poisson_avg_gen :: < f64 > ( 15.0 , 0.5 ) ;
166
- test_poisson_avg_gen :: < f32 > ( 10.0 , 0.5 ) ;
167
- test_poisson_avg_gen :: < f32 > ( 15.0 , 0.5 ) ;
164
+ test_poisson_avg_gen :: < f64 > ( 10.0 , 0.1 ) ;
165
+ test_poisson_avg_gen :: < f64 > ( 15.0 , 0.1 ) ;
166
+
167
+ test_poisson_avg_gen :: < f32 > ( 10.0 , 0.1 ) ;
168
+ test_poisson_avg_gen :: < f32 > ( 15.0 , 0.1 ) ;
169
+
170
+ //Small lambda will use Knuth's method with exp_lambda == 1.0
171
+ test_poisson_avg_gen :: < f32 > ( 0.00000000000000005 , 0.1 ) ;
172
+ test_poisson_avg_gen :: < f64 > ( 0.00000000000000005 , 0.1 ) ;
168
173
}
169
174
170
175
#[ test]
0 commit comments