@@ -9,7 +9,7 @@ use az::Az;
9
9
use rug:: Assign ;
10
10
pub use rug:: Float as MpFloat ;
11
11
use rug:: float:: Round :: Nearest ;
12
- use rug:: ops:: { PowAssignRound , RemAssignRound } ;
12
+ use rug:: ops:: { MulAssignRound , PowAssign , PowAssignRound , RemAssignRound } ;
13
13
14
14
use crate :: { Float , MathOp } ;
15
15
@@ -270,6 +270,36 @@ macro_rules! impl_op_for_ty {
270
270
}
271
271
}
272
272
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
+
273
303
impl MpOp for crate :: op:: [ <sincos $suffix>] :: Routine {
274
304
type MpTy = ( MpFloat , MpFloat ) ;
275
305
0 commit comments