(no commit message)
authorlkcl <lkcl@web>
Tue, 8 Oct 2019 11:05:57 +0000 (12:05 +0100)
committerIkiWiki <ikiwiki.info>
Tue, 8 Oct 2019 11:05:57 +0000 (12:05 +0100)
simple_v_extension/vector_ops/discussion.mdwn

index 05e346d15a1fa23b39b14cc0ed92e7dbbb4b716d..d2e351959e402ae6b9b674a468ad2b3244f30127 100644 (file)
@@ -125,6 +125,37 @@ From <https://github.com/suyashmahar/cordic-algorithm-python>
         return { 'x':x_val_list, 'y':y_val_list, 'z':z_val_list,
                  'iteration':iterations_list }
 
+Alternative in c:
+
+     int i = 0;
+     int iterations = 0; // Number of times to run the algorithm
+     float arctanTable[iterations]; // in Radians
+     float K = 0.6073; // K
+     float v_x,v_y; // Vector v; x and y components
+
+     for(i=0; i < iterations; i++) {
+        arctanTable[i] = atan(pow(2,-i));
+     }
+
+     float vnew_x;   // To store the new value of x;
+     for(i = 0; i < iterations; i++) {
+         // If beta is negative, we need to do a counter-clockwise rotation:
+         if( beta < 0) {
+            vnew_x = v_x + (v_y*pow(2,-i)); 
+            v_y -= (v_x*pow(2,-i));  
+            beta += arctanTable[i]; 
+         }
+         // If beta is positive, we need to do a clockwise rotation:
+         else {
+            vnew_x = v_x - (v_y*pow(2,-i));
+            v_y += (v_x*pow(2,-i));
+            beta -= arctanTable[i];
+         }
+         v_x = vnew_x;
+     }
+     v_x *= K;
+     v_y *= K;
+
 # Vector Length
 
 <http://lists.libre-riscv.org/pipermail/libre-riscv-dev/2019-October/002982.html>