Skip to content

Commit

Permalink
Refactor scale.float
Browse files Browse the repository at this point in the history
  • Loading branch information
JosephTLyons committed Nov 15, 2024
1 parent 25b4ad9 commit 6ec1037
Showing 1 changed file with 12 additions and 21 deletions.
33 changes: 12 additions & 21 deletions src/lenient_parse/internal/scale.gleam
Original file line number Diff line number Diff line change
Expand Up @@ -34,40 +34,31 @@ pub fn queues(
}
}

pub fn float(factor: Float, exponent: Int) {
do_float(
factor: factor,
exponent: exponent,
scale_factor: 1,
exponent_is_positive: exponent >= 0,
)
pub fn float(factor: Float, exponent: Int) -> Float {
do_float(factor, exponent, 1, exponent >= 0)
}

fn do_float(
factor factor: Float,
exponent exponent: Int,
scale_factor scale_factor: Int,
exponent_is_positive exponent_is_positive: Bool,
factor: Float,
exponent: Int,
scale_factor: Int,
exponent_is_positive: Bool,
) -> Float {
case int.compare(exponent, 0) {
order.Eq -> {
let scale_factor_float = scale_factor |> int.to_float
let scale_factor_float = int.to_float(scale_factor)
case exponent_is_positive {
True -> factor *. scale_factor_float
False -> factor /. scale_factor_float
}
}
order.Gt ->
do_float(
factor,
exponent - 1,
scale_factor * base_10,
exponent_is_positive,
)
order.Lt ->
_ ->
do_float(
factor,
exponent + 1,
case exponent_is_positive {
True -> exponent - 1
False -> exponent + 1
},
scale_factor * base_10,
exponent_is_positive,
)
Expand Down

0 comments on commit 6ec1037

Please sign in to comment.