@@ -417,49 +417,61 @@ impl U512 {
417
417
}
418
418
419
419
fn div_internal ( self , other : Self ) -> Self {
420
- let div = other;
421
- let mut divisor = other;
422
- let leading_zeros = divisor. leading_zeros ( ) ;
423
- divisor <<= leading_zeros - self . leading_zeros ( ) ;
424
-
425
- let mut value = self ;
426
- let mut quotient = Self :: MIN ;
427
-
428
- while value >= div {
429
- while value < divisor {
430
- divisor >>= 1 ;
431
- quotient <<= 1 ;
420
+ match self . cmp ( & other) {
421
+ core:: cmp:: Ordering :: Less => Self :: ZERO ,
422
+ core:: cmp:: Ordering :: Equal => Self :: ONE ,
423
+ _ => {
424
+ let div = other;
425
+ let mut divisor = other;
426
+ let leading_zeros = divisor. leading_zeros ( ) ;
427
+ divisor <<= leading_zeros - self . leading_zeros ( ) ;
428
+
429
+ let mut value = self ;
430
+ let mut quotient = Self :: MIN ;
431
+
432
+ while value >= div {
433
+ while value < divisor {
434
+ divisor >>= 1 ;
435
+ quotient <<= 1 ;
436
+ }
437
+
438
+ value -= divisor;
439
+ quotient = quotient. add_single ( 1 ) ;
440
+ }
441
+ let rem_offset = div. leading_zeros ( ) - divisor. leading_zeros ( ) ;
442
+
443
+ quotient << rem_offset
432
444
}
433
-
434
- value -= divisor;
435
- quotient = quotient. add_single ( 1 ) ;
436
445
}
437
- let rem_offset = div. leading_zeros ( ) - divisor. leading_zeros ( ) ;
438
- println ! ( "Rem: {rem_offset}" ) ;
439
-
440
- quotient << rem_offset
441
446
}
442
447
443
448
fn rem_internal ( self , other : Self ) -> Self {
444
- let div = other;
445
- let mut divisor = other;
446
- let leading_zeros = divisor. leading_zeros ( ) ;
447
- divisor <<= leading_zeros - self . leading_zeros ( ) ;
448
-
449
- let mut value = self ;
450
- let mut quotient = U512 :: ZERO ;
451
-
452
- while value >= div {
453
- while value < divisor {
454
- divisor >>= 1 ;
455
- quotient <<= 1 ;
449
+ match self . cmp ( & other) {
450
+ core:: cmp:: Ordering :: Less => self ,
451
+ core:: cmp:: Ordering :: Equal => Self :: ZERO ,
452
+ _ => {
453
+ let div = other;
454
+ let mut divisor = other;
455
+ let leading_zeros = divisor. leading_zeros ( ) ;
456
+ divisor <<= leading_zeros - self . leading_zeros ( ) ;
457
+
458
+ let mut value = self ;
459
+ let mut quotient = Self :: MIN ;
460
+
461
+ while value >= div {
462
+ while value < divisor {
463
+ divisor >>= 1 ;
464
+ quotient <<= 1 ;
465
+ }
466
+
467
+ value -= divisor;
468
+ quotient = quotient. add_single ( 1 ) ;
469
+ }
470
+ let rem_offset = div. leading_zeros ( ) - divisor. leading_zeros ( ) ;
471
+
472
+ quotient << rem_offset
456
473
}
457
-
458
- value -= divisor;
459
- quotient = quotient. add_single ( 1 ) ;
460
474
}
461
-
462
- value
463
475
}
464
476
465
477
pub fn div_single ( self , divisor : u64 ) -> Self {
0 commit comments