250 likes | 506 Views
A Redundant Binary Euclidean GCD Algorithm. S. N. Parikh, D. W. Matula Computer Arithmetic 10th IEEE Symposium pp.220-225 1991 陳正昇. Outline. Binary Euclidean Algorithm Redundant Binary Representation and normalization Redundant Binary Euclidean Algorithm. Binary Euclidean Algorithm.
E N D
A Redundant Binary Euclidean GCD Algorithm S. N. Parikh, D. W. Matula Computer Arithmetic 10th IEEE Symposium pp.220-225 1991 陳正昇 1
Outline • Binary Euclidean Algorithm • Redundant Binary Representation and normalization • Redundant Binary Euclidean Algorithm 2
Binary Euclidean Algorithm • Normalized • 數字介於[1/2,1),(-1,-1/2]之間 • Time complexity • O(nlogn) with O(n) hardware 3
Binary Euclidean Algorithm • 1. While P and Q not normalized do //normalize P and Q • 2. leftshift P,Q,Up,Uq; • 3. While Q != 0 do begin //find GCD(P,Q) , terminates when Q=0 • 4. While Q not normalized do //normalize Q • 5. leftshift Q and Uq; • 6. Loop //find the remainder of P/Q • 7. While P not normailzed do //normalize P • 8. Exit Loop if Uq=Up; • 9. Leftshift P and Up; • 10. End; • 11. If sign(P)=sign(Q) then //find the difference of P and Q • 12. P=P-Q • 13. else P=P+Q; • 14. EndLoop; • 15. Swap(P,Q);Swap(Up,Uq); //interchange of divisor and remainder • 16. End; • 17. While Up != 1 do rightshift P and Up; //shift back the P 4
Binary Euclidean Algorithm • 1. While P and Q not normalized do //normalize P and Q • 2. leftshift P,Q,Up,Uq; • 3. While Q != 0 do begin //find GCD(P,Q) • 4. While Q not normalized do //normalize Q • 5. leftshift Q and Uq; • 6. Loop //find the remainder of P/Q • 7. While P not normailzed do //normalize P • 8. Exit Loop if Uq=Up; • 9. Leftshift P and Up; • 10. End; 5
Binary Euclidean Algorithm • 11. If sign(P)=sign(Q) then //find the difference of P and Q • 12. P=P-Q • 13. else P=P+Q; • 14. EndLoop; • 15. Swap(P,Q);Swap(Up,Uq); //interchange of divisor and remainder • 16. End; • 17. While Up != 1 do rightshift P and Up; //shift back the P 6
EX. of Binary Euclidean Algorithm • P = 27(dec) = 11011(bin) 27/32 = 0.11011(bf) • Q = -12(dec) = -1100(bin) -12/32 = -0.011(bf) • GCD(P,Q) = 3(dec) = 11(bin) 3/32 = 0.00011(bf) 7
EX. of Binary Euclidean Algorithm 3/32 = 0.00011(bf) GCD(P,Q) = 11(bin) = 3(dec) 10
Redundant Binary Representation and normalization • Binary redundant representation • (b = 2, -1 aj 1 ) • n = (1864)10 = (11101001000)2= (100101001000)2 • 1 = -1 11
Redundant Binary Representation and normalization • Signed bit fraction • b0.b1b3b4```bk , bi = 1,0,1 for all i • 1 = -1 • Normalized standard form : b0=0 , b1!=0 and b2!=-b1 • Complement standard form : b0!=0 , b1=0 12
Redundant Binary Representation and normalization • Normalized • 數字介於(1/4,1),(-1,-1/4)之間 13
Redundant Binary Representation and normalization • Simshift(P)= • 0.b1b3b4```bk , if b1!=0 and b1=-b2 • 0.b2b3b4```bk , if b1=0 • 在Redundant Binary形式下的leftshift (*2) 14
Redundant Binary Representation and normalization • decomp(P)= • 0.b0b2b3```bk , if b0=-b1!=0 • P , if b0=0 • 轉成 Normalized standard form 15
Redundant Binary Representation and normalization • a diff b= • a-b for ab >= 0 (a,b同號) • a+b for ab < 0 (a,b不同號) • 求a和b的差 16
Redundant Binary Euclidean Algorithm • 1. While P and Q not normalized do • 2. Simshift P,Q and leftshift Up,Uq //Simshift P and Q • 3. LoopA • 4. While Q not normalized do //Simshift P • 5. Simshift Q and leftshift Uq; • 6. Exit LoopA if Uq overflows; • 7. LoopB //find the remainder of P/Q • 8. While P not normalized do //Simshift Q • 9. Exit LoopB if Up=Uq; • 10. Simshift P and leftshift Up; • 11. If(P diff Q) is normalized then //find the difference of P and Q • 12. If sign(P diff q) != sign(P) then • 13. If Up != Uq then • 14. leftshift Up; P = 2P diff Q; • 15. Else exit LoopB; • 16. Else P = P diff 2Q; • 17. Else P = P diff Q; • 18. P = decomp(P); //transform p to normalized standard form • 19. Simshift P; //Simshift P • 20. If Up != Uq then leftshift Up; • 21. Else leftshift Up and exit LoopB; • 22. End LoopB; • 23. Swap(P,Q);Swap(Up,Uq); //interchange of divisor and remainder • 24. End LoopA; • 25. While Up != 1 do rightshift P,Up //shift back the P 17
Redundant Binary Euclidean Algorithm • 1. While P and Q not normalized do • 2. Simshift P,Q and leftshift Up,Uq //Simshift P and Q • 3. LoopA • 4. While Q not normalized do //Simshift P • 5. Simshift Q and leftshift Uq; • 6. Exit LoopA if Uq overflows; • 7. LoopB //find the remainder of P/Q • 8. While P not normalized do //Simshift Q • 9. Exit LoopB if Up=Uq; • 10. Simshift P and leftshift Up; //find the difference of P and Q • 11. If(P diff Q) is normalized then • 12. If sign(P diff q) != sign(P) then • 13. If Up != Uq then • 14. leftshift Up; P = 2P diff Q; • 15. Else exit LoopB; 18
Redundant Binary Euclidean Algorithm • 16. Else P = P diff 2Q; • 17. Else P = P diff Q; //transform p to normalized standard form • 18. P = decomp(P); • 19. Simshift P; //Simshift P • 20. If Up != Uq then leftshift Up; • 21. Else leftshift Up and exit LoopB; • 22. End LoopB; //interchange of divisor and remainder • 23. Swap(P,Q);Swap(Up,Uq); • 24. End LoopA; • 25. While Up != 1 do rightshift P,Up //shift back the P 19
Redundant Binary Euclidean Algorithm • Time complexity • Addition is O(n) 4-2 signed 1-bit adders • O(n) with O(n) bit level processors 20
EX. of Redundant Binary Euclidean Algorithm • P = 27(dec) = 011011(bin) 27/32 = 0.11011(sbf) • Q = -12(dec) = 111001(1`sc) -12/32 = 0.011(sbf) GCD(P,Q) = 3(dec) = 000011(bin) 0.00011 (sbf) = 3/32 21
EX. of Redundant Binary Euclidean Algorithm • 3/32 = 0.00011(bf) GCD(P,Q) = 011(bin) = 3(dec) 25