PIC Microcontoller Math Method for square root

16 bit integer square root

;Copyryght(c) 2005, Isaac Marino Bavaresco
;PIC24/dsPIC assembly:
;Input value    = W10
;Result            = W11

isqrt:        mov.w    #0x0080,W2
           mov.w    #0,W11

           do        #7,greater

           ior.w    W2,W11,W13
           mul.uu    W13,W13,W4
           cp.w    W10,W4
           bra        LTU,Greater
           ior.w    W2,W11,W11
greater:    lsr.w    W2,#1,W2


/*
C equivalent:
*/

unsigned short isqrt( unsigned short value )
   {
   unsigned short    result, exp, temp;

   for( result    = 0, exp = 0x0080; exp != 0; exp >>= 1 )
       {
       temp    = result | exp;
       if( temp * temp <= value )
           result    = temp;
       }

   return result;
   }

unsigned long isqrtl( unsigned long value )
   {
   unsigned long    result, exp, temp;

   for( result    = 0, exp = 0x00008000; exp != 0; exp >>= 1 )
       {
       temp    = result | exp;
       if( temp * temp <= value )
           result    = temp;
       }

   return result;
   }