/* [wxMaxima batch file version 1] [ DO NOT EDIT BY HAND! ]*/ /* [ Created with wxMaxima version 0.8.1 ] */ /* [wxMaxima: title start ] Egyptian multiplication [wxMaxima: title end ] */ /* [wxMaxima: comment start ] Multiplication by doubling, halving and some bookkeeping. Recursive and iterative versions [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ verbose : true /* global control variable */ $ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ egyptian_multiplication(a, b) := (if verbose then printf(true, "~10d ~10d ~%", a, b), if a=1 then b else (if mod(a, 2) = 0 then egyptian_multiplication(a/2, 2*b) else b + egyptian_multiplication(a-1, b) ) ); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ egyptian_multiplication(60,4); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ verbose : false $ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ egyptian_multiplication(80,4); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ (verbose : true, egyptian_multiplication(92, 15) ) ; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ (verbose : false, egyptian_multiplication(92, 15) ) ; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ egyptian_multiplication_iterative(a,b) := block([a1 : a, b1 : b, c : 0 ], while a1 > 1 do (if verbose then printf(true, "~10d ~10d ~10d ~%", a1, b1, c), if mod(a1, 2)=0 then (a1 : a1/2, b1 : b1*2) else (a1 : a1-1, c : c+b1) ), if verbose then printf(true, "~10d ~10d ~10d ~%", a1, b1, c), b1+c ); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ (verbose : true, egyptian_multiplication_iterative(92,15)) ; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ (verbose : false, egyptian_multiplication_iterative(92,5)) ; /* [wxMaxima: input end ] */ /* Maxima can't load/batch files which end with a comment! */ "Created with wxMaxima"$