O_TYPE O_range(O_ARGS) /* build list from range of two numeric values */ { double v1 = RM1; double v2 = RM2; mpdm_t r = RF(MPDM_A(0)); if (v1 < v2) while (v1 <= v2) { mpdm_push(r, MPDM_R(v1)); v1 += 1.0; } else while (v1 >= v2) { mpdm_push(r, MPDM_R(v1)); v1 -= 1.0; } UFND(r); return r; }
O_TYPE O_div(O_ARGS) { return MPDM_R(RM1 / RM2); }
O_TYPE O_pow(O_ARGS) { return MPDM_R(pow(RM1, RM2)); }
O_TYPE O_sub(O_ARGS) { return MPDM_R(RM1 - RM2); }
O_TYPE O_mul(O_ARGS) { return MPDM_R(RM1 * RM2); }
O_TYPE O_add(O_ARGS) { return MPDM_R(RM1 + RM2); }
O_TYPE O_uminus(O_ARGS) { return MPDM_R(-mpdm_rval(M1)); }
/** real = time(); */ static mpdm_t F_time(F_ARGS) { return MPDM_R(mpdm_time()); }
static mpdm_t F_pow(F_ARGS) { return MPDM_R(pow(RA0, RA1)); }
static mpdm_t F_real(F_ARGS) { return MPDM_R(mpdm_rval(A0)); }