@@ -544,8 +544,7 @@ where
544
544
F : Float ,
545
545
Open01 : Distribution < F > ,
546
546
{
547
- a : F , a0 : F ,
548
- b : F , b0 : F ,
547
+ a : F , b : F , switched_params : bool ,
549
548
algorithm : BetaAlgorithm < F > ,
550
549
}
551
550
@@ -587,15 +586,19 @@ where
587
586
// From now on, we use the notation from the reference,
588
587
// i.e. `alpha` and `beta` are renamed to `a0` and `b0`.
589
588
let ( a0, b0) = ( alpha, beta) ;
590
- let ( a, b) = if a0 < b0 { ( a0, b0) } else { ( b0, a0) } ;
589
+ let ( a, b, switched_params) = if a0 < b0 {
590
+ ( a0, b0, false )
591
+ } else {
592
+ ( b0, a0, true )
593
+ } ;
591
594
if alpha > F :: one ( ) {
592
595
let alpha = a + b;
593
596
let beta = ( ( alpha - F :: from ( 2. ) . unwrap ( ) )
594
597
/ ( F :: from ( 2. ) . unwrap ( ) * a* b - alpha) ) . sqrt ( ) ;
595
598
let gamma = a + F :: one ( ) / beta;
596
599
597
600
Ok ( Beta {
598
- a, a0 , b, b0 ,
601
+ a, b, switched_params ,
599
602
algorithm : BetaAlgorithm :: BB ( BB {
600
603
alpha, beta, gamma,
601
604
} )
@@ -611,7 +614,7 @@ where
611
614
+ ( F :: from ( 0.5 ) . unwrap ( ) + F :: from ( 0.25 ) . unwrap ( ) /delta) * b;
612
615
613
616
Ok ( Beta {
614
- a, a0 , b, b0 ,
617
+ a, b, switched_params ,
615
618
algorithm : BetaAlgorithm :: BC ( BC {
616
619
alpha, beta, delta, kappa1, kappa2,
617
620
} )
@@ -654,7 +657,7 @@ where
654
657
}
655
658
}
656
659
// 5.
657
- if self . a == self . a0 {
660
+ if ! self . switched_params {
658
661
w / ( self . b + w)
659
662
} else {
660
663
self . b / ( self . b + w)
@@ -696,7 +699,7 @@ where
696
699
} ;
697
700
}
698
701
// 6.
699
- if self . a == self . a0 {
702
+ if ! self . switched_params {
700
703
if w == F :: infinity ( ) {
701
704
// Assuming `b` is finite, for large `w`:
702
705
return F :: one ( ) ;
0 commit comments