No Multiplication Algorithm in MATLAB: 32/Pi X arc-tangent of (x,y) using 4 most significant digits of (x or y)
%16x16 quadrant look-up table: ATAN2(1,1:16)= fi([ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ],0,4,0); ATAN2(2,1:16)= fi([ 0 8 11 13 13 14 14 14 15 15 15 15 15 15 15 15 ],0,4,0); ATAN2(3,1:16)= fi([ 0 5 8 10 11 12 13 13 13 14 14 14 14 14 14 14 ],0,4,0); ATAN2(4,1:16)= fi([ 0 3 6 8 9 10 11 12 12 13 13 13 13 13 14 14 ],0,4,0); ATAN2(5,1:16)= fi([ 0 2 5 6 8 9 10 11 11 12 12 12 13 13 13 13 ],0,4,0); ATAN2(6,1:16)= fi([ 0 2 4 5 7 8 9 10 10 11 11 11 12 12 12 13 ],0,4,0); ATAN2(7,1:16)= fi([ 0 2 3 5 6 7 8 9 9 10 10 11 11 11 12 12 ],0,4,0); ATAN2(8,1:16)= fi([ 0 1 3 4 5 6 7 8 9 9 10 10 10 11 11 11 ],0,4,0); ATAN2(9,1:16)= fi([ 0 1 2 4 5 6 6 7 8 8 9 9 10 10 11 11 ],0,4,0); ATAN2(10,1:16)=fi([ 0 1 2 3 4 5 6 7 7 8 8 9 9 10 10 10 ],0,4,0); ATAN2(11,1:16)=fi([ 0 1 2 3 4 5 5 6 7 7 8 8 9 9 10 10 ],0,4,0); ATAN2(12,1:16)=fi([ 0 1 2 3 3 4 5 6 6 7 7 8 8 9 9 9 ],0,4,0); ATAN2(13,1:16)=fi([ 0 1 2 2 3 4 5 5 6 6 7 7 8 8 9 9 ],0,4,0); ATAN2(14,1:16)=fi([ 0 1 2 2 3 4 4 5 6 6 7 7 7 8 8 9 ],0,4,0); ATAN2(15,1:16)=fi([ 0 1 1 2 3 3 4 5 5 6 6 7 7 8 8 8 ],0,4,0); ATAN2(16,1:16)=fi([ 0 1 1 2 3 3 4 4 5 5 6 6 7 7 8 8 ],0,4,0); CMP7=fi([0 127 0 0],0,7,0); % using look-up instead if if-end CMPA=fi([31 0 31 0],0,5,0); % using look-up instead if if-end X=int32(x); Y=int32(y); XsN=bitget(X,32); YsN=bitget(Y,32); XSM=uint16(bitshift(XsN+bitxor(CMP(1+XsN),X),-16)); YSM=uint16(bitshift(YsN+bitxor(CMP(1+YsN),Y),-16)); XYSM=bitor(bitor(XSM,YSM),uint16(15)); XYSM=bitset(XYSM,15,or(bitget(XYSM,16),bitget(XYSM,15))); XYSM=bitset(XYSM,14,or(bitget(XYSM,15),bitget(XYSM,14))); XYSM=bitset(XYSM,13,or(bitget(XYSM,14),bitget(XYSM,13))); XYSM=bitset(XYSM,12,or(bitget(XYSM,13),bitget(XYSM,12))); XYSM=bitset(XYSM,11,or(bitget(XYSM,12),bitget(XYSM,11))); XYSM=bitset(XYSM,10,or(bitget(XYSM,11),bitget(XYSM,10))); XYSM=bitset(XYSM,9,or(bitget(XYSM,10),bitget(XYSM,9))); XYSM=bitset(XYSM,8,or(bitget(XYSM,9),bitget(XYSM,8))); XYSM=bitset(XYSM,7,or(bitget(XYSM,8),bitget(XYSM,7))); XYSM=bitset(XYSM,6,or(bitget(XYSM,7),bitget(XYSM,6))); XYSM=bitset(XYSM,5,or(bitget(XYSM,6),bitget(XYSM,5))); XYSM=bitset(XYSM,4,or(bitget(XYSM,5),bitget(XYSM,4))); XYSM=bitset(XYSM,3,or(bitget(XYSM,4),bitget(XYSM,3))); XYSM=bitset(XYSM,2,or(bitget(XYSM,3),bitget(XYSM,2))); XYSM=bitset(XYSM,1,or(bitget(XYSM,2),bitget(XYSM,1))); XYSh=bitget(XYSM,1)+bitget(XYSM,2)+bitget(XYSM,3)+bitget(XYSM,4)+bitget(XYSM,5)+bitget(XYSM,6)+bitget(XYSM,7)+bitget(XYSM,8)+bitget(XYSM,9)+bitget(XYSM,10)+bitget(XYSM,11)+bitget(XYSM,12)+bitget(XYSM,13)+bitget(XYSM,14)+bitget(XYSM,15)+bitget(XYSM,16); XS = fi(0,0,5,0); YS = fi(0,0,5,0); XS = bitset(XS,4,bitget(XSM,XYSh)); XS = bitset(XS,3,bitget(XSM,XYSh-1)); XS = bitset(XS,2,bitget(XSM,XYSh-2)); XS = bitset(XS,1,bitget(XSM,XYSh-3)); YS = bitset(YS,4,bitget(YSM,XYSh)); YS = bitset(YS,3,bitget(YSM,XYSh-1)); YS = bitset(YS,2,bitget(YSM,XYSh-2)); YS = bitset(YS,1,bitget(YSM,XYSh-3)); XsZ = XS==0; XsP = ~or(XsZ,XsN); XsN = ~or(XsZ,XsP); YsZ = YS==0; YsP = ~or(YsZ,YsN); YsN = ~or(YsZ,YsP); Quad2 = or(and(XsZ,YsP),and(XsN,YsP)); Quad3 = or(and(XsN,YsZ),and(XsN,YsN)); Quad4 = or(and(XsZ,YsN),and(XsP,YsN)); Quadf = or(Quad4,Quad2)+1; Quad=bitand(CMP7(Quad2+1),fi(16,0,7,0))+bitand(CMP7(Quad3+1),fi(32,0,7,0))+bitand(CMP7(Quad4+1),fi(48,0,7,0)); AnswerX32overPi=fi(ATAN2(1+bitand(CMPA(Quadf),XS)+bitand(CMPA(Quadf+1),YS)+bitshift(fi(bitand(CMPA(Quadf),YS)+bitand(CMPA(Quadf+1),XS),0,8,0),4))+Quad,1,7,0);
atan2. Not sure if you can get by without a division, though. $\endgroup$atan2. You will still need a division though. $\endgroup$