Root/lib/int_sqrt.c

1/*
2 * Copyright (C) 2013 Davidlohr Bueso <davidlohr.bueso@hp.com>
3 *
4 * Based on the shift-and-subtract algorithm for computing integer
5 * square root from Guy L. Steele.
6 */
7
8#include <linux/kernel.h>
9#include <linux/export.h>
10
11/**
12 * int_sqrt - rough approximation to sqrt
13 * @x: integer of which to calculate the sqrt
14 *
15 * A very rough approximation to the sqrt() function.
16 */
17unsigned long int_sqrt(unsigned long x)
18{
19    unsigned long b, m, y = 0;
20
21    if (x <= 1)
22        return x;
23
24    m = 1UL << (BITS_PER_LONG - 2);
25    while (m != 0) {
26        b = y + m;
27        y >>= 1;
28
29        if (x >= b) {
30            x -= b;
31            y += m;
32        }
33        m >>= 2;
34    }
35
36    return y;
37}
38EXPORT_SYMBOL(int_sqrt);
39

Archive Download this file



interactive