Ethiopian multiplication: Difference between revisions
Content added Content deleted
(octave) |
(metafont) |
||
Line 144: | Line 144: | ||
end program EthiopicMult</lang> |
end program EthiopicMult</lang> |
||
=={{header|Metafont}}== |
|||
Implemented without the ''tutor''. |
|||
<lang metafont>vardef halve(expr x) = floor(x/2) enddef; |
|||
vardef double(expr x) = x*2 enddef; |
|||
vardef iseven(expr x) = if (x mod 2) = 0: true else: false fi enddef; |
|||
primarydef a ethiopicmult b = |
|||
begingroup |
|||
save r_, plier_, plicand_; |
|||
plier_ := a; plicand_ := b; |
|||
r_ := 0; |
|||
forever: exitif plier_ < 1; |
|||
if not iseven(plier_): r_ := r_ + plicand_; fi |
|||
plier_ := halve(plier_); |
|||
plicand_ := double(plicand_); |
|||
endfor |
|||
r_ |
|||
endgroup |
|||
enddef; |
|||
show( (17 ethiopicmult 34) ); |
|||
end</lang> |
|||
=={{header|Octave}}== |
=={{header|Octave}}== |