Fixing fixnum results with remainders in bignum sqrt.

This commit is contained in:
Alex Shinn 2013-01-05 23:38:20 +09:00
parent c5e4384821
commit c559ae11be

View file

@ -509,7 +509,7 @@ sexp sexp_bignum_sqrt (sexp ctx, sexp a) { /* Babylonian method */
/* convert back to inexact if non-zero remainder */ /* convert back to inexact if non-zero remainder */
rem = sexp_bignum_normalize(rem); rem = sexp_bignum_normalize(rem);
if (rem != SEXP_ZERO) if (rem != SEXP_ZERO)
res = sexp_make_flonum(ctx, sexp_bignum_to_double(res)); res = sexp_make_flonum(ctx, sexp_fixnump(res) ? sexp_unbox_fixnum(res) : sexp_bignum_to_double(res));
} }
sexp_gc_release4(ctx); sexp_gc_release4(ctx);
return sexp_bignum_normalize(res); return sexp_bignum_normalize(res);