# алгоритм – Calculating the square root without library methods

## Question:

How can you calculate the square root without using `sqrt(n)` and `n^0.5` ?

The question actually has many solutions.

The most banal is the method of half division.

``````double l = 0;
double r = 1e100; //большое число
double m;
while (r - l > 1e-8){ //точность
m = l + (r - l)/2;
if (m*m > n) l = m;
else r = m;
}
//ответ в l
``````

There are more original ways, for example, simulating a calculation in a column (here is an example , I will not give the code)

The method is more for C, but I think it can be used in Java as well. Explanation

``````float Q_rsqrt( float number )
{
long i;
float x2, y;
const float threehalfs = 1.5F;

x2 = number * 0.5F;
y  = number;
i  = * ( long * ) &y;
i  = 0x5f3759df - ( i >> 1 );
y  = * ( float * ) &i;
y  = y * ( threehalfs - ( x2 * y * y ) );   // 1 итерация
//  y  = y * ( threehalfs - ( x2 * y * y ) );   // 2 итерация, можно удалить
return 1/y;
}
``````

You can use logarithms

``````return Math.exp( Math.log(n) / 2);
``````

You can use numerical methods, such as Newton's method

``````double x = 1;
for (;;) {
double nx = (x + n / x) / 2;
if (abs (x - nx) < 1e-10)  break; //точность
x = nx;
}
``````

There are many other ways, it all depends on the specific requirements.

Scroll to Top