@@ -24,10 +24,7 @@ const MP_DEFAULT_ULP: u32 = 1;
2424pub fn default_ulp ( ctx : & CheckCtx ) -> u32 {
2525 match ( & ctx. basis , ctx. fn_ident ) {
2626 // Overrides that apply to either basis
27- ( _, Id :: J0 | Id :: J0f | Id :: J1 | Id :: J1f ) => {
28- // Results seem very target-dependent
29- if cfg ! ( target_arch = "x86_64" ) { 4000 } else { 800_000 }
30- }
27+ ( _, Id :: J0 | Id :: J0f | Id :: J1 | Id :: J1f ) => 8_000_000 ,
3128 ( _, Id :: Jn | Id :: Jnf ) => 1000 ,
3229
3330 // Overrides for musl
@@ -45,6 +42,7 @@ pub fn default_ulp(ctx: &CheckCtx) -> u32 {
4542 ( Mpfr , Id :: Acoshf ) => 4 ,
4643 ( Mpfr , Id :: Asinh | Id :: Asinhf ) => 2 ,
4744 ( Mpfr , Id :: Atanh | Id :: Atanhf ) => 2 ,
45+ ( Mpfr , Id :: Atan2 ) => 2 ,
4846 ( Mpfr , Id :: Exp10 | Id :: Exp10f ) => 6 ,
4947 ( Mpfr , Id :: Lgamma | Id :: LgammaR | Id :: Lgammaf | Id :: LgammafR ) => 16 ,
5048 ( Mpfr , Id :: Sinh | Id :: Sinhf ) => 2 ,
@@ -128,6 +126,21 @@ impl MaybeOverride<(f32,)> for SpecialCase {
128126 return XFAIL ;
129127 }
130128
129+ if ctx. fn_name == "lgammaf"
130+ || ctx. fn_name == "lgammaf_r"
131+ && input. 0 > 4e36
132+ && expected. is_infinite ( )
133+ && !actual. is_infinite ( )
134+ {
135+ // This result should saturate but we return a finite value.
136+ return XFAIL ;
137+ }
138+
139+ if ctx. fn_name == "j0f" && input. 0 < -1e34 {
140+ // Errors get huge close to -inf
141+ return XFAIL ;
142+ }
143+
131144 maybe_check_nan_bits ( actual, expected, ctx)
132145 }
133146
@@ -189,6 +202,11 @@ impl MaybeOverride<(f64,)> for SpecialCase {
189202 return XFAIL ;
190203 }
191204
205+ if ctx. fn_name == "j0" && input. 0 < -1e300 {
206+ // Errors get huge close to -inf
207+ return XFAIL ;
208+ }
209+
192210 maybe_check_nan_bits ( actual, expected, ctx)
193211 }
194212
@@ -305,6 +323,7 @@ impl MaybeOverride<(i32, f32)> for SpecialCase {
305323 }
306324 }
307325}
326+
308327impl MaybeOverride < ( i32 , f64 ) > for SpecialCase {
309328 fn check_float < F : Float > (
310329 input : ( i32 , f64 ) ,
0 commit comments