mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-07-11 23:17:34 +02:00
Preserving and normalizing intermediate ratios.
This commit is contained in:
parent
057198c4d8
commit
60c95d0df2
1 changed files with 8 additions and 4 deletions
12
opt/bignum.c
12
opt/bignum.c
|
@ -1122,7 +1122,8 @@ sexp sexp_div (sexp ctx, sexp a, sexp b) {
|
|||
break;
|
||||
case SEXP_NUM_FIX_FIX:
|
||||
#if SEXP_USE_RATIOS
|
||||
r = sexp_make_ratio(ctx, a, b);
|
||||
tmp = sexp_make_ratio(ctx, a, b);
|
||||
r = sexp_ratio_normalize(ctx, tmp, SEXP_FALSE);
|
||||
#else
|
||||
f = sexp_fixnum_to_double(a) / sexp_fixnum_to_double(b);
|
||||
r = ((f == trunc(f)) ? sexp_make_fixnum((sexp_sint_t)f)
|
||||
|
@ -1134,7 +1135,8 @@ sexp sexp_div (sexp ctx, sexp a, sexp b) {
|
|||
break;
|
||||
case SEXP_NUM_FIX_BIG:
|
||||
#if SEXP_USE_RATIOS
|
||||
r = sexp_make_ratio(ctx, a, b);
|
||||
tmp = sexp_make_ratio(ctx, a, b);
|
||||
r = sexp_ratio_normalize(ctx, tmp, SEXP_FALSE);
|
||||
#else
|
||||
r = sexp_make_flonum(ctx, sexp_fixnum_to_double(a)/sexp_bignum_to_double(b));
|
||||
#endif
|
||||
|
@ -1150,7 +1152,8 @@ sexp sexp_div (sexp ctx, sexp a, sexp b) {
|
|||
break;
|
||||
case SEXP_NUM_BIG_FIX:
|
||||
#if SEXP_USE_RATIOS
|
||||
r = sexp_make_ratio(ctx, a, b);
|
||||
tmp = sexp_make_ratio(ctx, a, b);
|
||||
r = sexp_ratio_normalize(ctx, tmp, SEXP_FALSE);
|
||||
break;
|
||||
#else
|
||||
b = tmp = sexp_fixnum_to_bignum(ctx, b);
|
||||
|
@ -1158,7 +1161,8 @@ sexp sexp_div (sexp ctx, sexp a, sexp b) {
|
|||
/* ... FALLTHROUGH if ! SEXP_USE_RATIOS ... */
|
||||
case SEXP_NUM_BIG_BIG:
|
||||
#if SEXP_USE_RATIOS
|
||||
r = sexp_make_ratio(ctx, a, b);
|
||||
tmp = sexp_make_ratio(ctx, a, b);
|
||||
r = sexp_ratio_normalize(ctx, tmp, SEXP_FALSE);
|
||||
#else
|
||||
r = sexp_bignum_quot_rem(ctx, &rem, a, b);
|
||||
if (sexp_bignum_normalize(rem) != SEXP_ZERO)
|
||||
|
|
Loading…
Add table
Reference in a new issue