38 lines
756 B
C
38 lines
756 B
C
#include "libft.h"
|
||
|
||
/*
|
||
* return the square root of nb
|
||
* Newton–Raphson method : https://en.wikipedia.org/wiki/Newton%27s_method#Use_of_Newton's_method_to_compute_square_roots
|
||
*/
|
||
double ft_sqrt(double x, double precision)
|
||
{
|
||
if (x < 0)
|
||
return -1; // handle negative numbers
|
||
if (x == 0)
|
||
return 0;
|
||
|
||
// Newton-Raphson
|
||
double guess = x;
|
||
double prev_guess;
|
||
do
|
||
{
|
||
prev_guess = guess;
|
||
guess = (guess + x / guess) / 2.0;
|
||
} while (ft_fabs(prev_guess - guess) > precision);
|
||
return guess;
|
||
|
||
// // binary search
|
||
// double low = 0;
|
||
// double high = x;
|
||
// double mid;
|
||
// while (high - low > precision)
|
||
// {
|
||
// mid = (low + high) / 2.0;
|
||
// if (mid * mid < x)
|
||
// low = mid;
|
||
// else
|
||
// high = mid;
|
||
// }
|
||
// return (low + high) / 2.0;
|
||
}
|