Microcontrollers & CORDIC Methods
by Michael Pashea



Listing One
multiply(x,y){         
   for (i=1; i=<R; i++){
      if (x > 0)
         x = x - 2(^-i)
         z = z + y*2^(-i)
      else  
         x = x + 2(^-i)
         z = z - y*2^(-i)
   }
   return(z)
}

Listing Two
divide(x,y){
   for (i=1; i=<R; i++){
      if (x > 0)
         x = x - y*2(^-i);
         z = z + 2^(-i);
      else  
         x = x + y*2(^-i);
         z = z - 2^(-i);
   }
   return(z)
}

Listing Three
divide_4q(x,y){
   for (i=1; i=<R; i++){
      if (x > 0)
        if (y > 0)
           x = x - y*2(^-i);
           z = z + 2^(-i);
        else
           x = x + y*2(^-i);
           z = z - 2^(-i);
      else          
         if (y > 0)
            x = x + y*2(^-i);
            z = z - 2^(-i);
         else
            x = x - y*2(^-i);
            z = z + 2^(-i);
   }
   return(z)
}

Listing Four
log10(x){
   z = 0;
   for ( i=1;i=<B;i++ ){
      if (x > 1)
         x = x - x*2^(-i);
         z = z - log10(1-2^(-i));
       else
         x = x + x*2^(-i);
         z = z - log10(1+2^(-i));
   }
   return(z)
}

Listing Five
10_to_power(x){
   z = 1;
   for ( i=1;i=<B; i++ ){
      if (x > 0)
         x = x - log10(1+2^(-i));
         z = z + z*2^(-i);
      else
         x = x - log10(1-2^(-i));
         z = z - z*2^(-i);
   }
   return(z)
}


Listing Six
sin(z){  
   x = 1.6468;
   y = 0;       
   for (i=0; i=<R; i++){
      if (z > 0)
         x = x - y*2(^-i)
         y = y + x*2(^-i)
         z = z - arctan(2^(-i))
      else  
         x = x + y*2(^-i)
         y = y - x*2^(-i)
         z = z + arctan(2^(-i))
   }
   return(y)
}
cos(z){  
   x = 1.6468;
   y = 0;
   for (i=0; i=<R; i++){
      if (z > 0)
         x = x - y*2(^-i)
         y = y + x*2(^-i)
         z = z - arctan(2^(-i))
      else
         x = x + y*2(^-i)
         y = y - x*2^(-i)
         z = z + arctan(2^(-i))
   }
   return(x)
}





2


