Ethiopian multiplication: Difference between revisions
Content added Content deleted
m (→{{header|REXX}}: added/changed comments, added subroutine fence, added whitespace. -- ~~~~) |
|||
Line 2,668: | Line 2,668: | ||
=={{header|REXX}}== |
=={{header|REXX}}== |
||
⚫ | |||
<lang rexx> |
|||
numeric digits 1000 /*handle very large integers. */ |
|||
⚫ | |||
parse arg a b . /*handles zeroes & negative ints.*/ |
|||
/*A & B should be checked if ints*/ |
|||
⚫ | |||
say 'a=' a |
say 'a=' a |
||
say 'b=' b |
say 'b=' b |
||
say 'product=' emult(a,b) |
say 'product=' emult(a,b) |
||
⚫ | |||
exit |
|||
/*──────────────────────────────────EMULT subroutine────────────────────*/ |
|||
emult: procedure; parse arg x 1 ox,y |
emult: procedure; parse arg x 1 ox,y |
||
prod=0 |
prod=0 |
||
do while x\==0 |
do while x\==0 |
||
if \iseven(x) then prod=prod+y |
if \iseven(x) then prod=prod+y |
||
x=halve(x) |
x=halve(x) |
||
y=double(y) |
y=double(y) |
||
end |
end |
||
return prod*sign(ox) |
return prod*sign(ox) |
||
/*──────────────────────────────────subroutines─────────────────────────*/ |
|||
halve: return arg(1)%2 |
halve: return arg(1)%2 |
||
double: return arg(1)*2 |
double: return arg(1)*2 |
||
Line 2,698: | Line 2,697: | ||
halve: procedure; parse arg ?; return ?%2 |
halve: procedure; parse arg ?; return ?%2 |
||
double: procedure; parse arg x; return x+x |
double: procedure; parse arg x; return x+x |
||
iseven: procedure; parse arg _; return _//2 == 0 |
iseven: procedure; parse arg _; return _//2 == 0</lang> |
||
</lang> |
|||
=={{header|Ruby}}== |
=={{header|Ruby}}== |