Anonymous user
Balanced ternary: Difference between revisions
m
→{{header|REXX}}: added/changed whitespace, split some statements.
m (→{{header|REXX}}: added/changed whitespace, split some statements.) |
|||
Line 4,281:
exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
d2bt: procedure; parse arg x 1;
x=x / 1
do until x==0; _= (x // (3** (p+1) ) ) % 3**p
if _== 2 then _= -
end /*until*/; return #
/*──────────────────────────────────────────────────────────────────────────────────────*/
bt2d: procedure; parse arg x; r= reverse(x); #= 0;
do j=1 for length(x); _= substr(r,j,1); #= # + $._ * 3**(j-1); end;
/*──────────────────────────────────────────────────────────────────────────────────────*/
btAdd: procedure; parse arg x,y; rx= reverse(x); ry= reverse(y);
@.=0 ; _= '-'; @._= -1; _= "+";
$.= '-'; $.0= 0; $.1= '+'
#=; do j=1 for max( length(x), length(y) )
x_= substr(rx, j, 1);
y_= substr(ry, j, 1);
s= xn + yn + carry;
if s== 2 then do; s=-1; carry= 1; end
if s== 3 then do; s= 0; carry= 1; end
if s==-2 then do; s= 1; carry=-1; end
#= $.s || #
end /*j*/
if carry\==0 then #= $.carry || #; return btNorm(#)
/*──────────────────────────────────────────────────────────────────────────────────────*/
btMul: procedure; parse arg x 1 x1 2, y 1 y1 2; if x==0 | y==0 then return 0
S= 1;
if x1=='-' then do; x= btNeg(x); S=-S; end
if y1=='-' then do; y= btNeg(y); S=-S; end
if length(y)>length(x) then parse value x y with y x /*optimize " " */
P=0
do until y==0 /*keep adding 'til done*/
P= btAdd(P, x)
y= btSub(y, '+')
end /*until*/
if S==-1 then P=btNeg(P); return P /*adjust the product sign; return. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
btNeg: return translate(arg(1), '-+', "+-") /*negate bal_ternary #.*/
btNorm: _= strip(arg(1), 'L', 0); if _=='' then _=0; return _
btSub: return btAdd( arg(1), btNeg( arg(2)
btShow: say center( arg(1), 9) right( arg(2), 20) @@ right( bt2d(arg(2)), 9) @;
{{out|output|text= when using the default input:}}
<pre>
|