99
1010//! The Fisher F-distribution.
1111
12- use crate :: { ChiSquared , Distribution , Exp1 , Open01 , StandardNormal } ;
12+ use crate :: { ChiSquared , Distribution , Exp1 , Open01 , StandardNormal , chi_squared } ;
1313use core:: fmt;
1414use num_traits:: Float ;
1515use rand:: Rng ;
5757#[ derive( Clone , Copy , Debug , PartialEq , Eq ) ]
5858#[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
5959pub enum Error {
60- /// `m <= 0` or `nan`.
60+ /// `0.5 * m <= 0. 0` or `nan`.
6161 MTooSmall ,
62- /// `n <= 0` or `nan`.
62+ /// `0.5 * n <= 0. 0` or `nan`.
6363 NTooSmall ,
6464}
6565
@@ -84,17 +84,13 @@ where
8484{
8585 /// Create a new `FisherF` distribution, with the given parameter.
8686 pub fn new ( m : F , n : F ) -> Result < FisherF < F > , Error > {
87- let zero = F :: zero ( ) ;
88- if !( m > zero) {
89- return Err ( Error :: MTooSmall ) ;
90- }
91- if !( n > zero) {
92- return Err ( Error :: NTooSmall ) ;
93- }
94-
9587 Ok ( FisherF {
96- numer : ChiSquared :: new ( m) . unwrap ( ) ,
97- denom : ChiSquared :: new ( n) . unwrap ( ) ,
88+ numer : ChiSquared :: new ( m) . map_err ( |x| match x {
89+ chi_squared:: Error :: DoFTooSmall => Error :: MTooSmall ,
90+ } ) ?,
91+ denom : ChiSquared :: new ( n) . map_err ( |x| match x {
92+ chi_squared:: Error :: DoFTooSmall => Error :: NTooSmall ,
93+ } ) ?,
9894 dof_ratio : n / m,
9995 } )
10096 }
0 commit comments