new struct for polynom

This commit is contained in:
hugogogo
2026-05-07 19:38:43 +02:00
parent f62a6fe94f
commit 23c788d0c2
10 changed files with 191 additions and 121 deletions

View File

@@ -61,8 +61,8 @@ static void terms_fill_null(s_term *terms, size_t terms_count_prediction)
{
terms[i].coefficient = 0.0;
terms[i].exponent = 0;
terms[i].position = TERM_END;
terms[i].sign = TERM_NULL;
terms[i].position = TERM_POS_END;
terms[i].sign = TERM_SIGN_END;
i++;
}
}
@@ -74,7 +74,7 @@ static int get_max_exponent(s_term *terms)
i = 0;
max_exponent = 0;
while (terms[i].position != TERM_END)
while (terms[i].position != TERM_POS_END)
{
if (terms[i].exponent > max_exponent)
{
@@ -86,14 +86,45 @@ static int get_max_exponent(s_term *terms)
return max_exponent;
}
static void polynom_fill_null(double *polynom, int len)
static int get_number_of_exponents(s_term *terms, int max_exponent)
{
int i;
int nbr_of_exponent;
int exponent_present[max_exponent];
ft_bzero(exponent_present, sizeof(exponent_present));
// mark exponents as present
i = 0;
while (terms[i].position != TERM_POS_END)
{
exponent_present[terms[i].exponent] = 1;
i++;
}
// Count unique exponents
nbr_of_exponent = 0;
i = 0;
while (i < max_exponent)
{
if (exponent_present[i] == 1)
nbr_of_exponent++;
i++;
}
return nbr_of_exponent;
}
static void polynom_fill_null(s_polynom *polynom, int len)
{
int i;
i = 0;
while (i <= len)
while (i < len)
{
polynom[i] = 0.0;
polynom[i].coefficient = 0.0;
polynom[i].exponent = 0;
polynom[i].sign = TERM_SIGN_END;
i++;
}
}
@@ -101,6 +132,8 @@ static void polynom_fill_null(double *polynom, int len)
void launch_computorv1(char *input)
{
int max_exponent;
int nbr_of_exponents;
int degree;
size_t arg_len;
size_t terms_count_prediction;
@@ -127,20 +160,22 @@ void launch_computorv1(char *input)
// reduce
max_exponent = get_max_exponent(terms);
print_debug("-> max_exponent: %i\n\n", max_exponent);
double polynom[max_exponent + 1];
nbr_of_exponents = get_number_of_exponents(terms, max_exponent);
print_debug("-> nbr_of_exponents: %i\n\n", nbr_of_exponents);
s_polynom polynom[nbr_of_exponents + 2]; // +1 for last term, +1 for the degree (eg. degree 2 means 3 terms)
polynom_g_err = polynom;
polynom_len_g_err = max_exponent;
polynom_fill_null(polynom, max_exponent);
reduce(terms, polynom);
polynom_fill_null(polynom, nbr_of_exponents + 2);
degree = reduce(terms, polynom, max_exponent);
print_debug("-> degree: %i\n\n", degree);
// print before solution
print_reduced_form(polynom, max_exponent);
print_degree(polynom, max_exponent);
print_reduced_form(polynom);
// print_degree(polynom, degree);
// solve
s_solution solution[1];
solution_g_err = solution;
solve(polynom, solution);
// // solve
// s_solution solution[1];
// solution_g_err = solution;
// solve(polynom, solution);
// print solution