Skip to content

Commit

Permalink
[stdlib] Simplify Int.__floordiv__ and friends
Browse files Browse the repository at this point in the history
Signed-off-by: Yiwu Chen <210at85@gmail.com>
  • Loading branch information
soraros committed Sep 18, 2024
1 parent 11fc566 commit 8ac9226
Showing 1 changed file with 10 additions and 26 deletions.
36 changes: 10 additions & 26 deletions stdlib/src/builtin/int.mojo
Original file line number Diff line number Diff line change
Expand Up @@ -592,14 +592,11 @@ struct Int(
`floor(self/rhs)` value.
"""
# This should raise an exception
var denominator = select(rhs == 0, 1, rhs)
var div: Int = self._positive_div(denominator)

var denom = select(rhs == 0, 1, rhs)
var div = self._positive_div(denom)
var mod = self - div * rhs
var divMod = select(((rhs < 0) ^ (self < 0)) & mod, div - 1, div)
div = select(self > 0 & rhs > 0, div, divMod)
div = select(rhs == 0, 0, div)
return div
div = select(((rhs < 0) ^ (self < 0)) & mod, div - 1, div)
return select(rhs == 0, 0, div)

@always_inline("nodebug")
fn __mod__(self, rhs: Int) -> Int:
Expand All @@ -611,16 +608,11 @@ struct Int(
Returns:
The remainder of dividing self by rhs.
"""
var denominator = select(rhs == 0, 1, rhs)
var div: Int = self._positive_div(denominator)

var denom = select(rhs == 0, 1, rhs)
var div = self._positive_div(denom)
var mod = self - div * rhs
var divMod = select(((rhs < 0) ^ (self < 0)) & mod, mod + rhs, mod)
mod = select(
self > 0 & rhs > 0, self._positive_rem(denominator), divMod
)
mod = select(rhs == 0, 0, mod)
return mod
mod = select(((rhs < 0) ^ (self < 0)) & mod, mod + rhs, mod)
return select(rhs == 0, 0, mod)

@always_inline("nodebug")
fn __divmod__(self, rhs: Int) -> Tuple[Int, Int]:
Expand All @@ -630,17 +622,9 @@ struct Int(
rhs: The value to divide on.
Returns:
The quotient and remainder as a `Tuple(self // rhs, self % rhs)`.
The quotient and remainder as a tuple `(self // rhs, self % rhs)`.
"""
if rhs == 0:
return 0, 0
var div: Int = self._positive_div(rhs)
if rhs > 0 & self > 0:
return div, self._positive_rem(rhs)
var mod = self - div * rhs
if ((rhs < 0) ^ (self < 0)) & mod:
return div - 1, mod + rhs
return div, mod
return self // rhs, self % rhs

@always_inline("nodebug")
fn __pow__(self, exp: Self) -> Self:
Expand Down

0 comments on commit 8ac9226

Please sign in to comment.