1 2 #include <linux/kernel.h> 3 #include <linux/module.h> 4 5 /** 6 * int_sqrt - rough approximation to sqrt 7 * @x: integer of which to calculate the sqrt 8 * 9 * A very rough approximation to the sqrt() function. 10 */ int_sqrt(unsigned long x)11unsigned long int_sqrt(unsigned long x) 12 { 13 unsigned long op, res, one; 14 15 op = x; 16 res = 0; 17 18 one = 1UL << (BITS_PER_LONG - 2); 19 while (one > op) 20 one >>= 2; 21 22 while (one != 0) { 23 if (op >= res + one) { 24 op = op - (res + one); 25 res = res + 2 * one; 26 } 27 res /= 2; 28 one /= 4; 29 } 30 return res; 31 } 32 EXPORT_SYMBOL(int_sqrt); 33