@@ -59,6 +59,7 @@ pub(crate) trait TestableFloat: Sized {
5959 const NEG_MUL_ADD_RESULT : Self ;
6060 /// Reciprocal of the maximum val
6161 const MAX_RECIP : Self ;
62+ const ASINH_ACOSH_MAX : Self ;
6263}
6364
6465impl TestableFloat for f16 {
@@ -103,6 +104,7 @@ impl TestableFloat for f16 {
103104 const MUL_ADD_RESULT : Self = 62.031 ;
104105 const NEG_MUL_ADD_RESULT : Self = 48.625 ;
105106 const MAX_RECIP : Self = 1.526624e-5 ;
107+ const ASINH_ACOSH_MAX : Self = 11.781 ;
106108}
107109
108110impl TestableFloat for f32 {
@@ -149,6 +151,7 @@ impl TestableFloat for f32 {
149151 const MUL_ADD_RESULT : Self = 62.05 ;
150152 const NEG_MUL_ADD_RESULT : Self = 48.65 ;
151153 const MAX_RECIP : Self = 2.938736e-39 ;
154+ const ASINH_ACOSH_MAX : Self = 89.4159851 ;
152155}
153156
154157impl TestableFloat for f64 {
@@ -180,6 +183,7 @@ impl TestableFloat for f64 {
180183 const MUL_ADD_RESULT : Self = 62.050000000000004 ;
181184 const NEG_MUL_ADD_RESULT : Self = 48.650000000000006 ;
182185 const MAX_RECIP : Self = 5.562684646268003e-309 ;
186+ const ASINH_ACOSH_MAX : Self = 710.47586007394398 ;
183187}
184188
185189impl TestableFloat for f128 {
@@ -221,6 +225,7 @@ impl TestableFloat for f128 {
221225 const MUL_ADD_RESULT : Self = 62.0500000000000000000000000000000037 ;
222226 const NEG_MUL_ADD_RESULT : Self = 48.6500000000000000000000000000000049 ;
223227 const MAX_RECIP : Self = 8.40525785778023376565669454330438228902076605e-4933 ;
228+ const ASINH_ACOSH_MAX : Self = 11357.216553474703894801348310092223 ;
224229}
225230
226231/// Determine the tolerance for values of the argument type.
@@ -1705,6 +1710,9 @@ float_test! {
17051710
17061711 assert_approx_eq!( flt( -200.0 ) . asinh( ) , -5.991470797049389 , Float :: ASINH_APPROX ) ;
17071712
1713+ // issue 153878: large values were rounding to infinity
1714+ assert_approx_eq!( Float :: MAX . asinh( ) , Float :: ASINH_ACOSH_MAX , Float :: ASINH_APPROX ) ;
1715+
17081716 #[ allow( overflowing_literals) ]
17091717 if Float :: MAX > flt( 66000.0 ) {
17101718 // regression test for the catastrophic cancellation fixed in 72486
@@ -1733,6 +1741,9 @@ float_test! {
17331741 assert_approx_eq!( flt( 2.0 ) . acosh( ) , 1.31695789692481670862504634730796844 , Float :: ACOSH_APPROX ) ;
17341742 assert_approx_eq!( flt( 3.0 ) . acosh( ) , 1.76274717403908605046521864995958461 , Float :: ACOSH_APPROX ) ;
17351743
1744+ // issue 153878: large values were rounding to infinity
1745+ assert_approx_eq!( Float :: MAX . acosh( ) , Float :: ASINH_ACOSH_MAX , Float :: ACOSH_APPROX ) ;
1746+
17361747 #[ allow( overflowing_literals) ]
17371748 if Float :: MAX > flt( 66000.0 ) {
17381749 // test for low accuracy from issue 104548
0 commit comments