--- cvsroot/microscheme/scheme.c 2015/12/01 02:42:35 1.54 +++ cvsroot/microscheme/scheme.c 2015/12/01 03:03:11 1.55 @@ -4001,20 +4001,21 @@ { #if USE_MATH case OP_INEX2EX: /* inexact->exact */ - { - if (is_integer (x)) - s_return (x); + if (!is_integer (x)) + { + RVALUE r = rvalue_unchecked (x); - RVALUE r = rvalue_unchecked (x); + if (r == (RVALUE)(IVALUE)r) + x = mk_integer (SCHEME_A_ rvalue_unchecked (x)); + else + Error_1 ("inexact->exact: not integral:", x); + } - if (r == (RVALUE)(IVALUE)r) - s_return (mk_integer (SCHEME_A_ rvalue_unchecked (x))); - else - Error_1 ("inexact->exact: not integral:", x); - } + s_return (x); case OP_EXP: s_return (mk_real (SCHEME_A_ exp (rvalue (x)))); - case OP_LOG: s_return (mk_real (SCHEME_A_ log (rvalue (x)))); + case OP_LOG: s_return (mk_real (SCHEME_A_ log (rvalue (x)) + / (cadr (args) == NIL ? 1 : log (rvalue (cadr (args)))))); case OP_SIN: s_return (mk_real (SCHEME_A_ sin (rvalue (x)))); case OP_COS: s_return (mk_real (SCHEME_A_ cos (rvalue (x)))); case OP_TAN: s_return (mk_real (SCHEME_A_ tan (rvalue (x)))); @@ -4022,13 +4023,10 @@ case OP_ACOS: s_return (mk_real (SCHEME_A_ acos (rvalue (x)))); case OP_ATAN: - if (cdr (args) == NIL) - s_return (mk_real (SCHEME_A_ atan (rvalue (x)))); - else - { - pointer y = cadr (args); - s_return (mk_real (SCHEME_A_ atan2 (rvalue (x), rvalue (y)))); - } + s_return (mk_real (SCHEME_A_ + cdr (args) == NIL + ? atan (rvalue (x)) + : atan2 (rvalue (x), rvalue (cadr (args))))); case OP_SQRT: s_return (mk_real (SCHEME_A_ sqrt (rvalue (x))));