function [q, r] = poly_long_div(n, d) gd = length(d); pv = zeros(1, length(n)); pv(1:gd) = d; if ( length(n) >= gd ) q = []; while ( length(n) >= gd ) q = [q, n(1)/pv(1)]; n = n - pv .* (n(1)/pv(1)); n = shift(n, -1); % tn = n(1:length(n)-1); % eat the higher power term n = tn; % tp = pv(1:length(pv)-1); pv = tp; % make pv the same length of n endwhile r = n; else q = [0]; r = n; endif endfunction [q, r] = poly_long_div([1,-12,0,-42], [1,-3]); polyout(q, 'x'); polyout(r, 'x'); disp(""); [q, r] = poly_long_div([1,-12,0,-42], [1,1,-3]); polyout(q, 'x'); polyout(r, 'x'); disp(""); [q, r] = poly_long_div([1,3,2], [1,1]); polyout(q, 'x'); polyout(r, 'x'); disp(""); [q, r] = poly_long_div([1,3], [1,-12,0,-42]); polyout(q, 'x'); polyout(r, 'x');