Ethiopian multiplication: Difference between revisions

m
→‎{{header|REXX}}: added/changed comments, added subroutine fence, added whitespace. -- ~~~~
m (→‎{{header|REXX}}: added/changed comments, added subroutine fence, added whitespace. -- ~~~~)
Line 2,668:
 
=={{header|REXX}}==
<lang rexx>/*REXX program multiplies 2 integers by Ethiopian/Russian peasant method*/
<lang rexx>
numeric digits 1000 /*handle very large integers. */
/*REXX program multiplies 2 integers by Ethiopian/Russian peasant method*/
numericparse digitsarg 1000a b . /*handle extremely large integers. /*handles zeroes & negative ints.*/
parse arg a b . /*handlesA & B should zeroesbe andchecked negativeif integers.ints*/
/*A & B should be checked if integers.*/
say 'a=' a
say 'b=' b
say 'product=' emult(a,b)
exit /*A & B/*stick a shouldfork bein checkedit, ifwe're integersdone.*/
exit
/*──────────────────────────────────EMULT subroutine────────────────────*/
 
emult: procedure; parse arg x 1 ox,y
prod=0
do while x\==0
if \iseven(x) then prod=prod+y
x=halve(x)
y=double(y)
end
return prod*sign(ox)
/*──────────────────────────────────subroutines─────────────────────────*/
 
halve: return arg(1)%2
double: return arg(1)*2
Line 2,698 ⟶ 2,697:
halve: procedure; parse arg ?; return ?%2
double: procedure; parse arg x; return x+x
iseven: procedure; parse arg _; return _//2 == 0</lang>
</lang>
 
=={{header|Ruby}}==