@@ -6,6 +6,8 @@ use core::num::fmt::{Formatted, Part};
66use std:: mem:: MaybeUninit ;
77use std:: { fmt, str} ;
88
9+ use crate :: num:: { ldexp_f32, ldexp_f64} ;
10+
911mod estimator;
1012mod strategy {
1113 mod dragon;
@@ -75,24 +77,6 @@ macro_rules! try_fixed {
7577 } )
7678}
7779
78- #[ cfg( target_has_reliable_f16) ]
79- fn ldexp_f16 ( a : f16 , b : i32 ) -> f16 {
80- ldexp_f64 ( a as f64 , b) as f16
81- }
82-
83- fn ldexp_f32 ( a : f32 , b : i32 ) -> f32 {
84- ldexp_f64 ( a as f64 , b) as f32
85- }
86-
87- fn ldexp_f64 ( a : f64 , b : i32 ) -> f64 {
88- unsafe extern "C" {
89- fn ldexp ( x : f64 , n : i32 ) -> f64 ;
90- }
91- // SAFETY: assuming a correct `ldexp` has been supplied, the given arguments cannot possibly
92- // cause undefined behavior
93- unsafe { ldexp ( a, b) }
94- }
95-
9680fn check_exact < F , T > ( mut f : F , v : T , vstr : & str , expected : & [ u8 ] , expectedk : i16 )
9781where
9882 T : DecodableFloat ,
@@ -268,7 +252,7 @@ where
268252 // 10^2 * 0.31984375
269253 // 10^2 * 0.32
270254 // 10^2 * 0.3203125
271- check_shortest ! ( f( ldexp_f16( 1.0 , 5 ) ) => b"32" , 2 ) ;
255+ check_shortest ! ( f( crate :: num :: ldexp_f16( 1.0 , 5 ) ) => b"32" , 2 ) ;
272256
273257 // 10^5 * 0.65472
274258 // 10^5 * 0.65504
@@ -283,7 +267,7 @@ where
283267 // 10^-9 * 0
284268 // 10^-9 * 0.59604644775390625
285269 // 10^-8 * 0.11920928955078125
286- let minf16 = ldexp_f16 ( 1.0 , -24 ) ;
270+ let minf16 = crate :: num :: ldexp_f16 ( 1.0 , -24 ) ;
287271 check_shortest ! ( f( minf16) => b"6" , -7 ) ;
288272}
289273
@@ -292,7 +276,7 @@ pub fn f16_exact_sanity_test<F>(mut f: F)
292276where
293277 F : for < ' a > FnMut ( & Decoded , & ' a mut [ MaybeUninit < u8 > ] , i16 ) -> ( & ' a [ u8 ] , i16 ) ,
294278{
295- let minf16 = ldexp_f16 ( 1.0 , -24 ) ;
279+ let minf16 = crate :: num :: ldexp_f16 ( 1.0 , -24 ) ;
296280
297281 check_exact ! ( f( 0.1f16 ) => b"999755859375 " , -1 ) ;
298282 check_exact ! ( f( 0.5f16 ) => b"5 " , 0 ) ;
@@ -642,7 +626,7 @@ where
642626 assert_eq ! ( to_string( f, f16:: MAX , Minus , 1 ) , "65500.0" ) ;
643627 assert_eq ! ( to_string( f, f16:: MAX , Minus , 8 ) , "65500.00000000" ) ;
644628
645- let minf16 = ldexp_f16 ( 1.0 , -24 ) ;
629+ let minf16 = crate :: num :: ldexp_f16 ( 1.0 , -24 ) ;
646630 assert_eq ! ( to_string( f, minf16, Minus , 0 ) , "0.00000006" ) ;
647631 assert_eq ! ( to_string( f, minf16, Minus , 8 ) , "0.00000006" ) ;
648632 assert_eq ! ( to_string( f, minf16, Minus , 9 ) , "0.000000060" ) ;
@@ -766,7 +750,7 @@ where
766750 assert_eq ! ( to_string( f, f16:: MAX , Minus , ( -4 , 4 ) , false ) , "6.55e4" ) ;
767751 assert_eq ! ( to_string( f, f16:: MAX , Minus , ( -5 , 5 ) , false ) , "65500" ) ;
768752
769- let minf16 = ldexp_f16 ( 1.0 , -24 ) ;
753+ let minf16 = crate :: num :: ldexp_f16 ( 1.0 , -24 ) ;
770754 assert_eq ! ( to_string( f, minf16, Minus , ( -2 , 2 ) , false ) , "6e-8" ) ;
771755 assert_eq ! ( to_string( f, minf16, Minus , ( -7 , 7 ) , false ) , "6e-8" ) ;
772756 assert_eq ! ( to_string( f, minf16, Minus , ( -8 , 8 ) , false ) , "0.00000006" ) ;
@@ -922,7 +906,7 @@ where
922906 assert_eq ! ( to_string( f, f16:: MAX , Minus , 6 , false ) , "6.55040e4" ) ;
923907 assert_eq ! ( to_string( f, f16:: MAX , Minus , 16 , false ) , "6.550400000000000e4" ) ;
924908
925- let minf16 = ldexp_f16 ( 1.0 , -24 ) ;
909+ let minf16 = crate :: num :: ldexp_f16 ( 1.0 , -24 ) ;
926910 assert_eq ! ( to_string( f, minf16, Minus , 1 , false ) , "6e-8" ) ;
927911 assert_eq ! ( to_string( f, minf16, Minus , 2 , false ) , "6.0e-8" ) ;
928912 assert_eq ! ( to_string( f, minf16, Minus , 4 , false ) , "5.960e-8" ) ;
@@ -1229,7 +1213,7 @@ where
12291213
12301214 #[ cfg( target_has_reliable_f16) ]
12311215 {
1232- let minf16 = ldexp_f16 ( 1.0 , -24 ) ;
1216+ let minf16 = crate :: num :: ldexp_f16 ( 1.0 , -24 ) ;
12331217 assert_eq ! ( to_string( f, minf16, Minus , 0 ) , "0" ) ;
12341218 assert_eq ! ( to_string( f, minf16, Minus , 1 ) , "0.0" ) ;
12351219 assert_eq ! ( to_string( f, minf16, Minus , 2 ) , "0.00" ) ;
0 commit comments