aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorUdo <git@udo.codes>2023-02-22 22:20:19 +0100
committerLouis Pilfold <louis@lpil.uk>2023-02-25 13:38:56 +0000
commit23136f431ca7dd07a1071c84d59dda9b715baf2b (patch)
treeca20165122a48b3efa1a5dcc057963ff77192f3a /src
parente4e1ace4394ff7cf13769785be029aae287f7440 (diff)
downloadgleam_stdlib-23136f431ca7dd07a1071c84d59dda9b715baf2b.tar.gz
gleam_stdlib-23136f431ca7dd07a1071c84d59dda9b715baf2b.zip
Fix edge-case in int.floor_divide
Diffstat (limited to 'src')
-rw-r--r--src/gleam/int.gleam10
1 files changed, 4 insertions, 6 deletions
diff --git a/src/gleam/int.gleam b/src/gleam/int.gleam
index 44a6de4..2ef4b73 100644
--- a/src/gleam/int.gleam
+++ b/src/gleam/int.gleam
@@ -759,13 +759,11 @@ pub fn modulo(dividend: Int, by divisor: Int) -> Result(Int, Nil) {
pub fn floor_divide(dividend: Int, by divisor: Int) -> Result(Int, Nil) {
case divisor {
0 -> Error(Nil)
- divisor -> {
- let quotient = dividend / divisor
- case quotient < 0 && dividend % divisor != 0 {
- True -> Ok(quotient - 1)
- False -> Ok(quotient)
+ divisor ->
+ case dividend * divisor < 0 && dividend % divisor != 0 {
+ True -> Ok(dividend / divisor - 1)
+ False -> Ok(dividend / divisor)
}
- }
}
}