RosettaCodeData/Task/Four-bit-adder/PARI-GP/four-bit-adder.pari
2016-12-05 22:15:40 +01:00

12 lines
334 B
Text

xor(a,b)=(!a&b)||(a&!b);
halfadd(a,b)=[a&&b,xor(a,b)];
fulladd(a,b,c)=my(t=halfadd(a,c),s=halfadd(t[2],b));[t[1]||s[1],s[2]];
add4(a3,a2,a1,a0,b3,b2,b1,b0)={
my(s0,s1,s2,s3);
s0=fulladd(a0,b0,0);
s1=fulladd(a1,b1,s0[1]);
s2=fulladd(a2,b2,s1[1]);
s3=fulladd(a3,b3,s2[1]);
[s3[1],s3[2],s2[2],s1[2],s0[2]]
};
add4(0,0,0,0,0,0,0,0)