int main() { ARY_TP arr[ARY_SZ]; /* = { 0 }; */ /* print before initialization */ print_array(arr); /* set all to 1 and print */ set_ones(arr); print_array(arr); multiply_all(arr, 2); print_array(arr); /* set all to a sequence and print */ set_sequence(arr); print_array(arr); multiply_all(arr, 10); print_array(arr); return 0; }
void dproduct(void) { int i, j, n; n = length(p1) - 1; for (i = 0; i < n; i++) { p3 = cdr(p1); for (j = 0; j < n; j++) { push(car(p3)); if (i == j) { push(p2); derivative(); } p3 = cdr(p3); } multiply_all(n); } add_all(n); }
void trivial_divide(void) { int h; if (car(A) == symbol(MULTIPLY)) { h = tos; p0 = cdr(A); while (iscons(p0)) { if (!equal(car(p0), F)) { push(car(p0)); eval(); // force expansion of (x+1)^2, f.e. } p0 = cdr(p0); } multiply_all(tos - h); } else push_integer(1); T = pop(); }
void distill_product(void) { int h; // distill factors involving x p3 = cdr(p1); while (iscons(p3)) { if (find(car(p3), p2)) { push(car(p3)); push(p2); distill(); } p3 = cdr(p3); } // multiply together all constant factors h = tos; p3 = cdr(p1); while (iscons(p3)) { if (find(car(p3), p2) == 0) push(car(p3)); p3 = cdr(p3); } if (tos - h) { multiply_all(tos - h); //p3 = pop(); // may need later for pushing both +a, -a //push(p3); //push(p3); //negate(); } }
void absval(void) { int h; save(); p1 = pop(); if (istensor(p1)) { absval_tensor(); restore(); return; } if (isnum(p1)) { push(p1); if (isnegativenumber(p1)) negate(); restore(); return; } if (iscomplexnumber(p1)) { push(p1); push(p1); conjugate(); multiply(); push_rational(1, 2); power(); restore(); return; } // abs(1/a) evaluates to 1/abs(a) if (car(p1) == symbol(POWER) && isnegativeterm(caddr(p1))) { push(p1); reciprocate(); absval(); reciprocate(); restore(); return; } // abs(a*b) evaluates to abs(a)*abs(b) if (car(p1) == symbol(MULTIPLY)) { h = tos; p1 = cdr(p1); while (iscons(p1)) { push(car(p1)); absval(); p1 = cdr(p1); } multiply_all(tos - h); restore(); return; } if (isnegativeterm(p1) || (car(p1) == symbol(ADD) && isnegativeterm(cadr(p1)))) { push(p1); negate(); p1 = pop(); } push_symbol(ABS); push(p1); list(2); restore(); }