linux/lib/int_sqrt.c
<<
>>
Prefs
   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 */
  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}
  32EXPORT_SYMBOL(int_sqrt);
  33