updating sqrt to work with doubles
This commit is contained in:
@@ -1,15 +1,41 @@
|
||||
#include "libft.h"
|
||||
|
||||
/*
|
||||
** return the square root of nb
|
||||
** or the integer value of it
|
||||
*/
|
||||
int ft_sqrt(int nb)
|
||||
* 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)
|
||||
{
|
||||
int i;
|
||||
double precision;
|
||||
|
||||
i = 0;
|
||||
while ((i*i) < nb)
|
||||
i++;
|
||||
return (i);
|
||||
if (x < 0)
|
||||
return -1; // handle negative numbers
|
||||
if (x == 0)
|
||||
return 0;
|
||||
|
||||
precision = 0.00001;
|
||||
|
||||
// Newton-Raphson
|
||||
double guess = x;
|
||||
double prev_guess;
|
||||
do
|
||||
{
|
||||
prev_guess = guess;
|
||||
guess = (guess + x / guess) / 2.0;
|
||||
} while (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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user