Go to the documentation of this file.
60 if (source->
children[i] == NULL)
continue;
93 *polynominal_part = NULL;
100 (*rational_part)->children[1]->children[1]->sign = 1;
132 *polynominal_part = quotient;
135 *rational_part = NULL;
145 *rational_part = NULL;
161 if (source == NULL)
return;
206 uint8_t factor_degree;
216 simplify(b_derivative_negative,
true);
242 for (i = 0; i < a_degree + 1; i++) {
261 if (primitive_part != NULL) {
267 for (i = 0; i < primitive_part_factors->
child_count; i++) {
269 factor = primitive_part_factors->
children[0];
277 if (factor_degree <= 2) {
287 solve(equation, NULL);
357 if (polynominal_part == NULL) {
359 }
else if (rational_part == NULL) {
378 if (variable == NULL) {
400 *result = temp_source;
412 if (variable == NULL) {
void make_monic(expression *source)
void risch_integrate_polynominal_part(expression *source)
bool expression_is_risch_integrable(expression *source, expression *variable)
void embed_in_list_if_necessary(expression *source)
uint8_t derivative(expression **result, expression *source, expression *variable, bool persistent)
void replace_expression(expression *a, expression *b)
expression_identifier identifier
uint8_t antiderivative(expression **result, expression *source, expression *variable, bool persistent)
double literal_to_double(expression *source)
void replace_occurences(expression *source, const expression *child, const expression *replacement)
return_status any_expression_to_dense_polynomial(expression *source, const expression *variable)
void risch_get_extensions(expression *extensions, expression *source, expression *variable)
return_status validate_sparse_polynomial(expression *source, bool allow_decimal_exponents, bool allow_negative_exponents, bool allow_arbitrary_base)
#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.
union expression::@0 value
uint8_t solve(expression *source, expression *variable)
uint8_t risch_determine_parts(expression **polynominal_part, expression **rational_part, const expression *source, const expression *variable, const expression *extensions)
bool poly_is_square_free(expression *source)
bool expressions_are_identical(const expression *a, expression *b, bool persistent)
void itoa(char *buffer, uintmax_t source)
void free_expression(expression *source, bool persistent)
uint8_t set_error(error_domain domain, error_identifier identifier, const char *body)
Sets current_error to the arguments provided.
uint8_t count_occurrences(const expression *haystack, expression *needle, bool persistent)
return_status any_expression_to_sparse_polynomial(expression *source, const expression *variable)
void calculate_resultant(expression **result, expression *a, expression *b)
void any_expression_to_expression(expression *source)
uintmax_t max(uintmax_t a, uintmax_t b)
expression * copy_expression(const expression *source)
Returns a deep copy of an expression.
uint8_t risch_integrate(expression *source, expression *variable)
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)
uint8_t simplify(expression *source, bool recursive)
void any_expression_to_expression_recursive(expression *source)
uint8_t definite_integral(expression **result, expression *source, expression *variable, expression *lower_bound, expression *upper_bound)
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.
void rothstein_trager_method(expression *source)
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)
uint8_t risch_integrate_rational_part(expression *source)
struct expression ** children
bool expression_is_reziprocal(const expression *source)