@@ -9,7 +9,7 @@ use az::Az;
99use rug:: Assign ;
1010pub use rug:: Float as MpFloat ;
1111use rug:: float:: Round :: Nearest ;
12- use rug:: ops:: { PowAssignRound , RemAssignRound } ;
12+ use rug:: ops:: { MulAssignRound , PowAssign , PowAssignRound , RemAssignRound } ;
1313
1414use crate :: { Float , MathOp } ;
1515
@@ -270,6 +270,36 @@ macro_rules! impl_op_for_ty {
270270 }
271271 }
272272
273+ // `ldexp` and `scalbn` are the same for binary floating point, so just forward all
274+ // methods.
275+ impl MpOp for crate :: op:: [ <ldexp $suffix>] :: Routine {
276+ type MpTy = <crate :: op:: [ <scalbn $suffix>] :: Routine as MpOp >:: MpTy ;
277+
278+ fn new_mp( ) -> Self :: MpTy {
279+ <crate :: op:: [ <scalbn $suffix>] :: Routine as MpOp >:: new_mp( )
280+ }
281+
282+ fn run( this: & mut Self :: MpTy , input: Self :: RustArgs ) -> Self :: RustRet {
283+ <crate :: op:: [ <scalbn $suffix>] :: Routine as MpOp >:: run( this, input)
284+ }
285+ }
286+
287+ impl MpOp for crate :: op:: [ <scalbn $suffix>] :: Routine {
288+ type MpTy = ( MpFloat , MpFloat ) ;
289+
290+ fn new_mp( ) -> Self :: MpTy {
291+ ( new_mpfloat:: <Self :: FTy >( ) , new_mpfloat:: <Self :: FTy >( ) )
292+ }
293+
294+ fn run( this: & mut Self :: MpTy , input: Self :: RustArgs ) -> Self :: RustRet {
295+ this. 0 . assign( input. 0 ) ;
296+ this. 1 . assign( 2.0 ) ;
297+ this. 1 . pow_assign( input. 1 ) ;
298+ let ord = this. 0 . mul_assign_round( & this. 1 , Nearest ) ;
299+ prep_retval:: <Self :: FTy >( & mut this. 0 , ord)
300+ }
301+ }
302+
273303 impl MpOp for crate :: op:: [ <sincos $suffix>] :: Routine {
274304 type MpTy = ( MpFloat , MpFloat ) ;
275305
0 commit comments