Go to the documentation of this file.
47 if (source->
children[i] == NULL)
continue;
104 !allow_decimal_exponents) {
111 !allow_negative_exponents) {
137 uint8_t hightest_exponent_index = 0;
138 double hightest_exponent_value;
143 hightest_exponent_value = -1000000;
146 if (source->
children[j] == NULL)
continue;
148 hightest_exponent_index = j;
154 source->
children[hightest_exponent_index] = NULL;
184 if (source->
children[i] == NULL)
continue;
215 if (variable == NULL) {
217 if (temp_variable == NULL) {
228 if (temp_source->
children[i] == NULL)
continue;
444 if (variable == NULL) {
497 if (a_degree < b_degree) {
498 if (quotient != NULL) *quotient =
new_literal(1, 0, 1);
504 power = a_degree - b_degree;
532 if (remainder != NULL) *remainder =
new_literal(1, 0, 1);
536 poly_div(&temp_quotient, &temp_remainder, result, b_temp, a_degree - 1);
647 poly_div("ient, &remainder, a_temp, b_temp, -1);
void make_monic(expression *source)
return_status expression_to_sparse_polynomial(expression *source, const expression *variable)
uint8_t derivative(expression **result, expression *source, expression *variable, bool persistent)
void replace_expression(expression *a, expression *b)
expression_identifier identifier
return_status sparse_polynomial_to_dense_polynomial(expression *source)
double literal_to_double(expression *source)
return_status any_expression_to_dense_polynomial(expression *source, const expression *variable)
return_status validate_sparse_polynomial(expression *source, bool allow_decimal_exponents, bool allow_negative_exponents, bool allow_arbitrary_base)
void subtract_rhs(expression *source)
#define ERROR_CHECK(F)
Check if the return status of a function is RETS_ERROR. If so, return RETS_ERROR.
expression * new_symbol(expression_identifier identifier, const char *value)
Allocates and initializes a new symbol/variable expression.
expression * get_symbol(const expression *source)
union expression::@0 value
uint8_t solve(expression *source, expression *variable)
void sort_sparse_polynomial(expression *source)
bool poly_is_square_free(expression *source)
bool expressions_are_identical(const expression *a, expression *b, bool persistent)
void free_expression(expression *source, bool persistent)
return_status polysolve_quadratic(expression *source)
void dense_polynomial_to_sparse_polynomial(expression *source)
void free_expressions(uint8_t expression_count,...)
uint8_t count_occurrences(const expression *haystack, expression *needle, bool persistent)
return_status any_expression_to_sparse_polynomial(expression *source, const expression *variable)
void any_expression_to_expression(expression *source)
void poly_log_gcd(expression **gcd, const expression *source)
expression * copy_expression(const expression *source)
Returns a deep copy of an expression.
void quadratic_formula(expression **result, expression *a, expression *b, expression *c)
void sparse_polynomial_to_expression(expression *source)
uint8_t poly_gcd(expression **gcd, const expression *a, const expression *b)
uint8_t poly_div(expression **quotient, expression **remainder, const expression *a, const expression *b, int8_t degree)
void expression_to_sparse_polynomial_term(expression *source, const expression *variable)
uint8_t simplify(expression *source, bool recursive)
void any_expression_to_expression_recursive(expression *source)
void append_child(expression *parent, expression *child)
Appends a child to an expression.
expression * new_expression(expression_type type, expression_identifier identifier, uint8_t child_count,...)
Allocates and initializes a new expression with the arguments provided.
bool expression_is_greater_than(const expression *a, expression *b, bool persistent)
expression * guess_symbol(const expression *source, const char *custom_priorities, uint8_t rank)
expression * new_literal(int8_t sign, uintmax_t numerator, uintmax_t denominator)
Allocates and initializes a new literal expression.
uint8_t factor_square_free(expression **factors, const expression *source)
bool expressions_are_equivalent(const expression *a, expression *b, bool persistent)
struct expression ** children
return_status polysolve(expression *source, expression *variable)