Skip to content

Commit 0e2edf3

Browse files
Minor changes
1 parent aae93ac commit 0e2edf3

File tree

1 file changed

+48
-36
lines changed

1 file changed

+48
-36
lines changed

src/u512.rs

+48-36
Original file line numberDiff line numberDiff line change
@@ -417,49 +417,61 @@ impl U512 {
417417
}
418418

419419
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
432444
}
433-
434-
value -= divisor;
435-
quotient = quotient.add_single(1);
436445
}
437-
let rem_offset = div.leading_zeros() - divisor.leading_zeros();
438-
println!("Rem: {rem_offset}");
439-
440-
quotient << rem_offset
441446
}
442447

443448
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
456473
}
457-
458-
value -= divisor;
459-
quotient = quotient.add_single(1);
460474
}
461-
462-
value
463475
}
464476

465477
pub fn div_single(self, divisor: u64) -> Self {

0 commit comments

Comments
 (0)