Blame view

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