mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-18 21:29:19 +02:00
exact zero minus a number is negation (fixes issue #523)
This commit is contained in:
parent
09b564ed7b
commit
80bf4013f9
2 changed files with 3 additions and 3 deletions
2
bignum.c
2
bignum.c
|
@ -1347,7 +1347,7 @@ sexp sexp_sub (sexp ctx, sexp a, sexp b) {
|
||||||
r = sexp_fx_sub(a, b); /* VM catches this case */
|
r = sexp_fx_sub(a, b); /* VM catches this case */
|
||||||
break;
|
break;
|
||||||
case SEXP_NUM_FIX_FLO:
|
case SEXP_NUM_FIX_FLO:
|
||||||
r = sexp_make_flonum(ctx, sexp_fixnum_to_double(a)-sexp_flonum_value(b));
|
r = sexp_make_flonum(ctx, a==SEXP_ZERO ? -sexp_flonum_value(b) : sexp_fixnum_to_double(a)-sexp_flonum_value(b));
|
||||||
break;
|
break;
|
||||||
case SEXP_NUM_FIX_BIG:
|
case SEXP_NUM_FIX_BIG:
|
||||||
tmp1 = sexp_fixnum_to_bignum(ctx, a);
|
tmp1 = sexp_fixnum_to_bignum(ctx, a);
|
||||||
|
|
4
vm.c
4
vm.c
|
@ -1717,9 +1717,9 @@ sexp sexp_apply (sexp ctx, sexp proc, sexp args) {
|
||||||
else if (sexp_flonump(tmp1) && sexp_flonump(tmp2))
|
else if (sexp_flonump(tmp1) && sexp_flonump(tmp2))
|
||||||
_ARG1 = sexp_fp_sub(ctx, tmp1, tmp2);
|
_ARG1 = sexp_fp_sub(ctx, tmp1, tmp2);
|
||||||
else if (sexp_flonump(tmp1) && sexp_fixnump(tmp2))
|
else if (sexp_flonump(tmp1) && sexp_fixnump(tmp2))
|
||||||
_ARG1 = sexp_make_flonum(ctx, sexp_flonum_value(tmp1) - (double)sexp_unbox_fixnum(tmp2));
|
_ARG1 = sexp_make_flonum(ctx, sexp_flonum_value(tmp1) - sexp_fixnum_to_double(tmp2));
|
||||||
else if (sexp_fixnump(tmp1) && sexp_flonump(tmp2))
|
else if (sexp_fixnump(tmp1) && sexp_flonump(tmp2))
|
||||||
_ARG1 = sexp_make_flonum(ctx, (double)sexp_unbox_fixnum(tmp1) - sexp_flonum_value(tmp2));
|
_ARG1 = sexp_make_flonum(ctx, tmp1==SEXP_ZERO ? -sexp_flonum_value(tmp2) : sexp_fixnum_to_double(tmp1)-sexp_flonum_value(tmp2));
|
||||||
#endif
|
#endif
|
||||||
else sexp_raise("-: not a number", sexp_list2(ctx, tmp1, tmp2));
|
else sexp_raise("-: not a number", sexp_list2(ctx, tmp1, tmp2));
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Reference in a new issue