| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include <linux/kernel.h>
 | 
					
						
							| 
									
										
										
										
											2011-11-16 21:29:17 -05:00
										 |  |  | #include <linux/export.h>
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * 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; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-02-03 03:04:33 -08:00
										 |  |  | 	one = 1UL << (BITS_PER_LONG - 2); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	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); |