Linux Audio

Check our new training course

Loading...
v3.15
 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);
v3.1
 
 
 
 
 
 
 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);