updating sqrt to work with doubles

This commit is contained in:
hugogogo
2026-05-09 14:43:26 +02:00
parent 8edf428fed
commit ae9787ba6d
3 changed files with 48 additions and 22 deletions

View File

@@ -133,7 +133,7 @@ int ft_fsign(double i);
double ft_modf(double x, double *int_part);
double ft_pow(double base, int exponent);
double ft_round(double x);
int ft_sqrt(int i);
double ft_sqrt(double i);
void ft_free_tab(char **tab);
int ft_arrint(int *intarr, int comp, size_t size);

View File

@@ -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
* NewtonRaphson 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;
}

View File

@@ -1,15 +1,15 @@
#include "libft.h"
/*
** return the square root of nb
** or the integer value of it
*/
int ft_sqrt(int nb)
{
int i;
// /*
// ** return the square root of nb
// ** or the integer value of it
// */
// int ft_sqrt(int nb)
// {
// int i;
i = 0;
while ((i*i) < nb)
i++;
return (i);
}
// i = 0;
// while ((i*i) < nb)
// i++;
// return (i);
// }