mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-21 14:49:18 +02:00
missed some bignum/ratio normalization cases
This commit is contained in:
parent
96d8c7d797
commit
f895ace01b
2 changed files with 5 additions and 1 deletions
|
@ -493,7 +493,7 @@ sexp sexp_double_to_ratio (sexp ctx, double f) {
|
||||||
int sign, i;
|
int sign, i;
|
||||||
sexp_gc_var3(res, whole, scale);
|
sexp_gc_var3(res, whole, scale);
|
||||||
if (f == trunc(f))
|
if (f == trunc(f))
|
||||||
return sexp_double_to_bignum(ctx, f);
|
return sexp_bignum_normalize(sexp_double_to_bignum(ctx, f));
|
||||||
sexp_gc_preserve3(ctx, res, whole, scale);
|
sexp_gc_preserve3(ctx, res, whole, scale);
|
||||||
whole = sexp_double_to_bignum(ctx, trunc(f));
|
whole = sexp_double_to_bignum(ctx, trunc(f));
|
||||||
res = sexp_fixnum_to_bignum(ctx, SEXP_ZERO);
|
res = sexp_fixnum_to_bignum(ctx, SEXP_ZERO);
|
||||||
|
@ -507,6 +507,8 @@ sexp sexp_double_to_ratio (sexp ctx, double f) {
|
||||||
scale = sexp_mul(ctx, scale, SEXP_TEN);
|
scale = sexp_mul(ctx, scale, SEXP_TEN);
|
||||||
}
|
}
|
||||||
sexp_bignum_sign(res) = sign;
|
sexp_bignum_sign(res) = sign;
|
||||||
|
res = sexp_bignum_normalize(res);
|
||||||
|
scale = sexp_bignum_normalize(scale);
|
||||||
res = sexp_make_ratio(ctx, res, scale);
|
res = sexp_make_ratio(ctx, res, scale);
|
||||||
res = sexp_ratio_normalize(ctx, res, SEXP_FALSE);
|
res = sexp_ratio_normalize(ctx, res, SEXP_FALSE);
|
||||||
res = sexp_add(ctx, res, whole);
|
res = sexp_add(ctx, res, whole);
|
||||||
|
|
2
sexp.c
2
sexp.c
|
@ -2308,6 +2308,8 @@ sexp sexp_ratio_normalize (sexp ctx, sexp rat, sexp in) {
|
||||||
sexp_negate(sexp_ratio_numerator(rat));
|
sexp_negate(sexp_ratio_numerator(rat));
|
||||||
sexp_negate(sexp_ratio_denominator(rat));
|
sexp_negate(sexp_ratio_denominator(rat));
|
||||||
}
|
}
|
||||||
|
sexp_ratio_numerator(rat) = sexp_bignum_normalize(sexp_ratio_numerator(rat));
|
||||||
|
sexp_ratio_denominator(rat) = sexp_bignum_normalize(sexp_ratio_denominator(rat));
|
||||||
sexp_gc_release2(ctx);
|
sexp_gc_release2(ctx);
|
||||||
return (sexp_ratio_denominator(rat) == SEXP_ONE) ? sexp_ratio_numerator(rat)
|
return (sexp_ratio_denominator(rat) == SEXP_ONE) ? sexp_ratio_numerator(rat)
|
||||||
: rat;
|
: rat;
|
||||||
|
|
Loading…
Add table
Reference in a new issue