123456789101112131415161718192021222324252627282930313233 |
- #include <linux/kernel.h>
- #include <linux/export.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;
- one = 1UL << (BITS_PER_LONG - 2);
- 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);
|