PIPS
|
Go to the source code of this file.
Data Structures | |
struct | Smonome |
struct | Spolynome |
Macros | |
#define | POLYNOME_INCLUDED |
Warning! Do not modify this file that is automatically generated! More... | |
#define | monome_coeff(pm) ((pm)->coeff) |
Macros definitions. More... | |
#define | monome_term(pm) ((pm)->term) |
#define | polynome_monome(pp) ((pp)->monome) |
#define | polynome_succ(pp) ((pp)->succ) |
#define | is_single_monome(pp) ((!POLYNOME_NUL_P(pp)) && (POLYNOME_NUL_P(polynome_succ(pp)))) |
#define | monome_constant_new(coeff) make_monome(coeff, TCST, 1) |
#define | monome_power1_new(coeff, var) make_monome(coeff, var, 1) |
#define | MONOME_NUL ((Pmonome) -256) |
Null/undefined, monomial/polynomial definitions. More... | |
#define | MONOME_NUL_P(pm) ((pm)==MONOME_NUL) |
#define | MONOME_UNDEFINED ((Pmonome) -252) |
#define | MONOME_UNDEFINED_P(pm) ((pm)==MONOME_UNDEFINED) |
#define | MONOME_CONSTANT_P(pm) (term_cst((pm)->term)) |
#define | POLYNOME_NUL ((Ppolynome) NULL) |
#define | POLYNOME_NUL_P(pp) ((pp)==POLYNOME_NUL) |
#define | POLYNOME_UNDEFINED ((Ppolynome) -248) |
#define | POLYNOME_UNDEFINED_P(pp) ((pp)==POLYNOME_UNDEFINED) |
#define | MONOME_COEFF_MULTIPLY_SYMBOL "*" |
#define | MONOME_VAR_MULTIPLY_SYMBOL "." |
#define | POLYNOME_NUL_SYMBOL "0" |
#define | POLYNOME_UNDEFINED_SYMBOL "<polynome undefined>" |
#define | MONOME_NUL_SYMBOL "<monome nul>" |
#define | MONOME_UNDEFINED_SYMBOL "<monome undefined>" |
#define | MAX_NAME_LENGTH 50 |
#define | PNOME_MACH_EPS 1E-8 /**below this value, a float is null */ |
#define | PNOME_FLOAT_N_DECIMALES 2 /**nb of figures after point for coeffs */ |
#define | PNOME_FLOAT_TO_EXP_LEVEL 1E8 /**numbers >1E8 are printed with exponent */ |
#define | PNOME_FLOAT_TO_FRAC_LEVEL 9 /**print 1/2..1/9 rather than 0.50..0.11 */ |
Typedefs | |
typedef struct Smonome | Smonome |
typedef struct Smonome * | Pmonome |
typedef struct Spolynome | Spolynome |
typedef struct Spolynome * | Ppolynome |
Functions | |
Pmonome | new_monome (void) |
POLYNOME_INCLUDED. More... | |
Ppolynome | new_polynome (void) |
allocation of an unitialized polynome (to avoid various direct unchecked call to malloc) More... | |
Pmonome | make_monome (float, Variable, Value) |
Pmonome make_monome(float coeff, Variable var, Value expo) PRIVATE allocates space for, and creates, the monome "coeff*var^expo". More... | |
Ppolynome | make_polynome (float, Variable, Value) |
Ppolynome make_polynome(float coeff, Variable var, Value expo) PRIVATE allocates space for, and creates, the polynome "coeff*var^expo". More... | |
Ppolynome | monome_to_new_polynome (Pmonome) |
Ppolynome monome_to_new_polynome(Pmonome pm) PRIVATE allocates space for, and creates the polynomial containing the monomial pointed by pm, which is NOT duplicated but attached to the polynomial. More... | |
Pmonome | monome_dup (Pmonome) |
Pmonome monome_dup(Pmonome pm) PRIVATE creates and returns a copy of pm. More... | |
void | monome_rm (Pmonome *) |
void monome_rm(Pmonome* ppm) PRIVATE frees space occupied by monomial *ppm returns *ppm pointing to MONOME_NUL !usage: monome_rm(&pm); More... | |
void | polynome_rm (Ppolynome *) |
void polynome_rm(Ppolynome* ppp) frees space occupied by polynomial *ppp returns *ppp pointing to POLYNOME_NUL !usage: polynome_rm(&pp); More... | |
Ppolynome | polynome_free (Ppolynome) |
Ppolynome polynome_free(Ppolynome pp) frees space occupied by polynomial pp returns pp == POLYNOME_NUL !usage: polynome_rm(pp);. More... | |
Ppolynome | polynome_dup (Ppolynome) |
Ppolynome polynome_dup(Ppolynome pp) creates and returns a copy of pp. More... | |
void | polynome_monome_add (Ppolynome *, Pmonome) |
pnome-bin.c More... | |
Ppolynome | polynome_monome_addition (Ppolynome, Pmonome) |
Ppolynome polynome_monome_addition(Ppolynome pp, Pmonome pm) PRIVATE Add monomial pm to polynomial pp, in place. More... | |
void | polynome_add (Ppolynome *, Ppolynome) |
void polynome_add(Ppolynome* ppp, Ppolynome pp2) (*ppp) = (*ppp) + pp2. More... | |
Ppolynome | polynome_addition (Ppolynome, Ppolynome) |
Ppolynome polynome_addition(Ppolynome pp, Ppolynome pp2) pp = pp + pp2. More... | |
Ppolynome | polynome_monome_mult (Ppolynome, Pmonome) |
Ppolynome polynome_monome_mult(Ppolynome pp, Pmonome pm) PRIVATE returns pp * pm. More... | |
Ppolynome | polynome_mult (Ppolynome, Ppolynome) |
Ppolynome polynome_mult(Ppolynome pp1, Ppolynome pp2) returns pp1 * pp2. More... | |
Pmonome | monome_monome_div (Pmonome, Pmonome) |
Pmonome monome_monome_div(Pmonome pm1, Pmonome pm2) PRIVATE (pm1) = (pm1) / pm2. More... | |
Ppolynome | polynome_monome_div (Ppolynome, Pmonome) |
Ppolynome polynome_monome_div(Ppolynome pp, Pmonome pm) PRIVATE returns p = pp / pm. More... | |
Ppolynome | polynome_div (Ppolynome, Ppolynome) |
Ppolynome polynome_div(Ppolynome pp1, Ppolynome pp2) returns p = pp1 / pp2. More... | |
Ppolynome | vecteur_to_polynome (Pvecteur) |
=========================================================================== More... | |
void | polynome_error (const char *, char *,...) |
pnome-error.c More... | |
void | good_polynome_assert (char *,...) |
void good_polynome_assert(va_alist) Check if the second argument is a valid polynomial. More... | |
bool | monome_check (Pmonome) |
bool monome_check(Pmonome pm) Return true if all's right. More... | |
bool | polynome_check (Ppolynome) |
bool polynome_check(Ppolynome pp) Return true if all's right. More... | |
bool | is_polynome_a_monome (Ppolynome) |
bool is_polynome_a_monome(Ppolynome pp) Return true if the pp is just a monome. More... | |
void | float_to_frac (double, char **) |
pnome-io.c More... | |
void | monome_fprint (FILE *, Pmonome, Pbase, bool, char *(*)(Variable)) |
char * | monome_sprint (Pmonome, Pbase, bool, char *(*)(Variable)) |
void | polynome_fprint (FILE *, Ppolynome, char *(*)(Variable), int(*)(Pvecteur *, Pvecteur *)) |
char * | polynome_sprint (Ppolynome, char *(*)(Variable), int(*)(Pvecteur *, Pvecteur *)) |
char * | default_variable_name (Variable) |
char *default_variable_name(Variable var) returns for variable var the name "Vxxxx" where xxxx are four letters computed from (int) var. More... | |
int | default_is_inferior_var (Variable, Variable) |
bool default_is_inferior_var(Variable var1, Variable var2) return true if var1 is before var2, lexicographically, according to the "default_variable_name" naming. More... | |
int | default_is_inferior_varval (Pvecteur, Pvecteur) |
bool default_is_inferior_varval(Pvecteur varval1, Pvecteur varval2) return true if var1 is before var2, lexicographically, according to the "default_variable_name" naming. More... | |
int | default_is_inferior_pvarval (Pvecteur *, Pvecteur *) |
bool default_is_inferior_pvarval(Pvecteur * pvarval1, Pvecteur * pvarval2) return true if var1 is before var2, lexicographically, according to the "default_variable_name" naming. More... | |
Ppolynome | polynome_sscanf (char *, Variable(*)(Variable)) |
Ppolynome polynome_sscanf(char *sp, (*name_to_variable)()) converts into polynomial structure the expression passed in ASCII form in string sp. More... | |
Pmonome | monome_del_var (Pmonome, Variable) |
pnome-private.c More... | |
bool | monome_colin (Pmonome, Pmonome) |
bool monome_colin(Pmonome pm1, Pmonome pm2) PRIVATE returns true if the two monomials are "colinear": same variables, same exponents. More... | |
bool | monome_equal (Pmonome, Pmonome) |
bool monome_equal(Pmonome pm1, Pmonome pm2) PRIVATE returns true if the two monomials are equal same coeff., same variables, same exponents. More... | |
float | Bernouilli (int) |
float Bernouilli(int i) PRIVATE returns Bi = i-th Bernouilli number More... | |
int | factorielle (int) |
int factorielle (int n) PRIVATE returns n! More... | |
double | intpower (double, int) |
double intpower(double d, int n) returns d^n for all integers n More... | |
bool | is_inferior_monome (Pmonome, Pmonome, int(*)(Pvecteur *, Pvecteur *)) |
Ppolynome | polynome_var_subst (Ppolynome, Variable, Ppolynome) |
pnome-reduc.c More... | |
int | polynome_degree (Ppolynome, Variable) |
int polynome_degree(Ppolynome pp, Variable var) returns the degree of polynomial pp viewed as a polynomial of one variable, var. More... | |
int | polynome_max_degree (Ppolynome) |
int polynome_max_degree(Ppolynome pp) returns the degree of polynomial pp Let's hope there aren't too many negative powers... More... | |
Ppolynome | polynome_factorize (Ppolynome, Variable, int) |
Ppolynome polynome_factorize(Ppolynome pp, Variable var, int n) returns the (polynomial) coefficient of var^n in polynomial pp. More... | |
float | polynome_TCST (Ppolynome) |
float polynome_TCST(Ppolynome pp) returns the constant term of polynomial pp. More... | |
bool | polynome_constant_p (Ppolynome) |
bool polynome_constant_p(Ppolynome pp) return true if pp is a constant polynomial (including null polynomial) If pp is POLYNOME_UNDEFINED: abort. More... | |
Pbase | polynome_used_var (Ppolynome, int(*)(Pvecteur *, Pvecteur *)) |
bool | polynome_contains_var (Ppolynome, Variable) |
bool polynome_contains_var(Ppolynome pp, Variable var) PRIVATE returns true if variable var is in polynomial pp. More... | |
bool | polynome_equal (Ppolynome, Ppolynome) |
bool polynome_equal(Ppolynome pp1, Ppolynome pp2) return (pp1 == pp2) >>>TO BE CONTINUED<<< More... | |
void | polynome_scalar_mult (Ppolynome *, double) |
pnome-scal.c More... | |
Ppolynome | polynome_scalar_multiply (Ppolynome, double) |
void | polynome_scalar_add (Ppolynome *, double) |
Ppolynome | polynome_scalar_addition (Ppolynome, double) |
Ppolynome | polynome_power_n (Ppolynome, int) |
Ppolynome polynome_power_n(Ppolynome pp, int n) returns pp ^ n (n>=0) More... | |
Ppolynome | polynome_nth_root (Ppolynome, int) |
computes the n-root of polynomial if possible, that is if all exponents are multiple of n return POLYNOME_UNDEFINED if not possible symbolically More... | |
Ppolynome | number_replaces_var (Ppolynome, Variable, double) |
Ppolynome | polynome_incr (Ppolynome) |
Ppolynome polynome_incr(Ppolynome pp) returns pp + 1. More... | |
Ppolynome | polynome_decr (Ppolynome) |
Ppolynome polynome_decr(Ppolynome pp) returns pp - 1. More... | |
Pvecteur | polynome_roots (Ppolynome, Variable) |
pnome-root.c More... | |
void | polynome_negate (Ppolynome *) |
pnome-unaires.c More... | |
Ppolynome | polynome_opposed (Ppolynome) |
Ppolynome polynome_opposed(Ppolynome pp); changes sign of polynomial pp. More... | |
Ppolynome | polynome_sum_of_power (Ppolynome, int) |
Ppolynome polynome_sum_of_power(Ppolynome ppsup, int p) calculates the sum of i^p for i=1 to (ppsup), returns the polynomial sigma{i=1, ppsup} (i^p). More... | |
Ppolynome | polynome_sigma (Ppolynome, Variable, Ppolynome, Ppolynome) |
Ppolynome polynome_sigma(Ppolynome pp, Variable var, Ppolynome ppinf, ppsup) returns the sum of pp when its variable var is moving from ppinf to ppsup. More... | |
Ppolynome | polynome_sort (Ppolynome *, int(*)(Pvecteur *, Pvecteur *)) |
void | polynome_chg_var (Ppolynome *, Variable, Variable) |
void polynome_chg_var(Ppolynome *ppp, Variable v_old, Variable v_new) replace the variable v_old by v_new More... | |
#define is_single_monome | ( | pp | ) | ((!POLYNOME_NUL_P(pp)) && (POLYNOME_NUL_P(polynome_succ(pp)))) |
Definition at line 157 of file polynome.h.
#define MAX_NAME_LENGTH 50 |
Definition at line 181 of file polynome.h.
#define monome_coeff | ( | pm | ) | ((pm)->coeff) |
Macros definitions.
Definition at line 150 of file polynome.h.
#define MONOME_COEFF_MULTIPLY_SYMBOL "*" |
Definition at line 174 of file polynome.h.
#define monome_constant_new | ( | coeff | ) | make_monome(coeff, TCST, 1) |
Definition at line 159 of file polynome.h.
Definition at line 167 of file polynome.h.
#define MONOME_NUL ((Pmonome) -256) |
Null/undefined, monomial/polynomial definitions.
Definition at line 163 of file polynome.h.
#define MONOME_NUL_P | ( | pm | ) | ((pm)==MONOME_NUL) |
Definition at line 164 of file polynome.h.
#define MONOME_NUL_SYMBOL "<monome nul>" |
Definition at line 178 of file polynome.h.
#define monome_power1_new | ( | coeff, | |
var | |||
) | make_monome(coeff, var, 1) |
Definition at line 160 of file polynome.h.
#define monome_term | ( | pm | ) | ((pm)->term) |
Definition at line 151 of file polynome.h.
#define MONOME_UNDEFINED ((Pmonome) -252) |
Definition at line 165 of file polynome.h.
#define MONOME_UNDEFINED_P | ( | pm | ) | ((pm)==MONOME_UNDEFINED) |
Definition at line 166 of file polynome.h.
#define MONOME_UNDEFINED_SYMBOL "<monome undefined>" |
Definition at line 179 of file polynome.h.
#define MONOME_VAR_MULTIPLY_SYMBOL "." |
Definition at line 175 of file polynome.h.
#define PNOME_FLOAT_N_DECIMALES 2 /**nb of figures after point for coeffs */ |
Definition at line 184 of file polynome.h.
#define PNOME_FLOAT_TO_EXP_LEVEL 1E8 /**numbers >1E8 are printed with exponent */ |
Definition at line 185 of file polynome.h.
#define PNOME_FLOAT_TO_FRAC_LEVEL 9 /**print 1/2..1/9 rather than 0.50..0.11 */ |
Definition at line 186 of file polynome.h.
Definition at line 183 of file polynome.h.
#define POLYNOME_INCLUDED |
Warning! Do not modify this file that is automatically generated!
Modify src/Libs/polynome/polynome-local.h instead, to add your own modifications. header file built by cproto polynome-local.h
Definition at line 136 of file polynome.h.
#define polynome_monome | ( | pp | ) | ((pp)->monome) |
Definition at line 152 of file polynome.h.
#define POLYNOME_NUL ((Ppolynome) NULL) |
Definition at line 169 of file polynome.h.
#define POLYNOME_NUL_P | ( | pp | ) | ((pp)==POLYNOME_NUL) |
Definition at line 170 of file polynome.h.
#define POLYNOME_NUL_SYMBOL "0" |
Definition at line 176 of file polynome.h.
#define polynome_succ | ( | pp | ) | ((pp)->succ) |
Definition at line 153 of file polynome.h.
#define POLYNOME_UNDEFINED ((Ppolynome) -248) |
Definition at line 171 of file polynome.h.
#define POLYNOME_UNDEFINED_P | ( | pp | ) | ((pp)==POLYNOME_UNDEFINED) |
Definition at line 172 of file polynome.h.
#define POLYNOME_UNDEFINED_SYMBOL "<polynome undefined>" |
Definition at line 177 of file polynome.h.
float Bernouilli | ( | int | i | ) |
float Bernouilli(int i) PRIVATE returns Bi = i-th Bernouilli number
later, we could compute bigger Bernouilli(i) with the recurrence
To please the gcc compiler
Definition at line 108 of file pnome-private.c.
References polynome_error().
Referenced by polynome_sum_of_power().
bool default_is_inferior_pvarval(Pvecteur * pvarval1, Pvecteur * pvarval2) return true if var1 is before var2, lexicographically, according to the "default_variable_name" naming.
pvarval1 | varval1 |
pvarval2 | varval2 |
Definition at line 286 of file pnome-io.c.
References default_variable_name(), and vecteur_var.
Referenced by block_to_complexity(), final_statement_to_complexity_evaluation(), and polynome_equal().
bool default_is_inferior_var(Variable var1, Variable var2) return true if var1 is before var2, lexicographically, according to the "default_variable_name" naming.
var1 | ar1 |
var2 | ar2 |
Definition at line 265 of file pnome-io.c.
References default_variable_name().
bool default_is_inferior_varval(Pvecteur varval1, Pvecteur varval2) return true if var1 is before var2, lexicographically, according to the "default_variable_name" naming.
varval1 | arval1 |
varval2 | arval2 |
Definition at line 276 of file pnome-io.c.
References default_variable_name(), and vecteur_var.
char* default_variable_name | ( | Variable | var | ) |
char *default_variable_name(Variable var) returns for variable var the name "Vxxxx" where xxxx are four letters computed from (int) var.
I guess that many variables can have the same name since the naming is done modulo 26^4 ? RK. To be fixed...
var | ar |
Definition at line 242 of file pnome-io.c.
References intptr_t, malloc(), and TCST.
Referenced by default_is_inferior_pvarval(), default_is_inferior_var(), and default_is_inferior_varval().
int factorielle (int n) PRIVATE returns n!
Definition at line 136 of file pnome-private.c.
References polynome_error().
Referenced by average_probability_matrix().
void float_to_frac | ( | double | , |
char ** | |||
) |
void good_polynome_assert | ( | char * | function, |
... | |||
) |
void good_polynome_assert(va_alist) Check if the second argument is a valid polynomial.
If not, print first argument ((char *) function name) and abort.
function | unction |
Definition at line 84 of file pnome-error.c.
References abort, fprintf(), and polynome_check().
Referenced by polynome_monome_add(), and polynome_monome_addition().
double intpower | ( | double | d, |
int | n | ||
) |
double intpower(double d, int n) returns d^n for all integers n
Definition at line 155 of file pnome-private.c.
Referenced by float_to_frac(), and polynome_sum_of_power().
bool is_polynome_a_monome(Ppolynome pp) Return true if the pp is just a monome.
that means the polynom has only one term Check each monomial, make sure there's no nul or undefined monomial, then check unicity of each monomial.
LZ 06 Nov. 92
pp | p |
Definition at line 162 of file pnome-error.c.
References polynome_check(), POLYNOME_NUL, and polynome_succ.
Referenced by polynome_power_n().
Pmonome make_monome(float coeff, Variable var, Value expo) PRIVATE allocates space for, and creates, the monome "coeff*var^expo".
coeff | oeff |
var | ar |
expo | xpo |
Definition at line 81 of file pnome-alloc.c.
References monome_coeff, MONOME_NUL, monome_term, new_monome(), TCST, VALUE_ONE, value_zero_p, and vect_new().
Referenced by make_polynome(), number_replaces_var(), polynome_decr(), polynome_incr(), polynome_scalar_add(), polynome_scalar_addition(), and polynome_sscanf().
Ppolynome make_polynome(float coeff, Variable var, Value expo) PRIVATE allocates space for, and creates, the polynome "coeff*var^expo".
coeff | oeff |
var | ar |
expo | xpo |
Definition at line 100 of file pnome-alloc.c.
References assert, make_monome(), monome_to_new_polynome(), and MONOME_UNDEFINED_P.
Referenced by add_constraint_on_x(), apply_farkas(), complexity_float_add(), complexity_sigma(), create_farkas_poly(), enode_to_polynome(), evalue_to_polynome(), expression_to_polynome(), make_polynome_Xe(), make_single_var_complexity(), mapping_on_broadcast(), my_vecteur_to_polynome(), old_vecteur_to_polynome(), plc_make_proto(), polynome_power_n(), polynome_sum_of_power(), pvecteur_to_polynome(), reference_to_polynome(), sc_enumerate(), vecteur_mult(), and vecteur_to_polynome().
bool monome_check(Pmonome pm) Return true if all's right.
Looks if pm is MONOME_UNDEFINED; if not: make sure that the coeff is non nul, that the term is non nul, and checks the (Pvecteur) term. All this also checks that pm is pointing to a valid address.
Modification:
pm | m |
Definition at line 110 of file pnome-error.c.
References monome_coeff, MONOME_NUL_P, monome_term, MONOME_UNDEFINED_P, vect_check(), and VECTEUR_NUL_P.
Referenced by polynome_check().
bool monome_colin(Pmonome pm1, Pmonome pm2) PRIVATE returns true if the two monomials are "colinear": same variables, same exponents.
We consider that MONOME_UNDEFINED is only colinear to MONOME_UNDEFINED. [???]
pm1 | m1 |
pm2 | m2 |
Definition at line 77 of file pnome-private.c.
References MONOME_NUL_P, monome_term, MONOME_UNDEFINED_P, and vect_equal().
Referenced by polynome_check(), polynome_monome_add(), and polynome_monome_addition().
is it the only variable
now it is a constant term
pm | m |
var | ar |
Definition at line 47 of file pnome-private.c.
References monome_coeff, MONOME_NUL, MONOME_NUL_P, monome_term, MONOME_UNDEFINED, MONOME_UNDEFINED_P, new_monome(), TCST, VALUE_ONE, vect_del_var(), vect_new(), and VECTEUR_NUL_P.
Referenced by polynome_factorize(), and polynome_var_subst().
Pmonome monome_dup(Pmonome pm) PRIVATE creates and returns a copy of pm.
pm | m |
Definition at line 132 of file pnome-alloc.c.
References monome_coeff, MONOME_NUL, MONOME_NUL_P, monome_term, MONOME_UNDEFINED, MONOME_UNDEFINED_P, new_monome(), and vect_dup().
Referenced by monome_gen_copy_tree(), polynome_dup(), polynome_monome_add(), polynome_monome_addition(), and polynome_roots().
bool monome_equal(Pmonome pm1, Pmonome pm2) PRIVATE returns true if the two monomials are equal same coeff., same variables, same exponents.
pm1 | m1 |
pm2 | m2 |
Definition at line 93 of file pnome-private.c.
References monome_coeff, MONOME_NUL_P, monome_term, MONOME_UNDEFINED_P, and vect_equal().
Pmonome monome_monome_div(Pmonome pm1, Pmonome pm2) PRIVATE (pm1) = (pm1) / pm2.
!usage: monome_monome_div(pm, pm2); Lei Zhou , 09/07/91
returns ppm pointing to MONOME_NUL
pm1 | m1 |
pm2 | m2 |
Definition at line 314 of file pnome-bin.c.
References monome_coeff, MONOME_CONSTANT_P, MONOME_NUL_P, monome_rm(), monome_term, MONOME_UNDEFINED, MONOME_UNDEFINED_P, new_monome(), polynome_error(), TCST, VALUE_ONE, vect_chg_sgn(), vect_dup(), vect_new(), vect_substract(), and VECTEUR_NUL.
Referenced by polynome_monome_div().
void monome_rm | ( | Pmonome * | ppm | ) |
void monome_rm(Pmonome* ppm) PRIVATE frees space occupied by monomial *ppm returns *ppm pointing to MONOME_NUL !usage: monome_rm(&pm);
ppm | pm |
Definition at line 154 of file pnome-alloc.c.
References free(), MONOME_NUL, MONOME_NUL_P, monome_term, MONOME_UNDEFINED_P, and vect_rm().
Referenced by do_solve_hardware_constraints_on_volume(), monome_gen_free(), monome_monome_div(), monome_monome_mult(), polynome_decr(), polynome_free(), polynome_incr(), polynome_rm(), polynome_roots(), polynome_scalar_add(), polynome_scalar_addition(), polynome_sscanf(), and polynome_var_subst().
Ppolynome monome_to_new_polynome(Pmonome pm) PRIVATE allocates space for, and creates the polynomial containing the monomial pointed by pm, which is NOT duplicated but attached to the polynomial.
pm | m |
Definition at line 115 of file pnome-alloc.c.
References MONOME_NUL_P, MONOME_UNDEFINED_P, new_polynome(), polynome_monome, POLYNOME_NUL, polynome_succ, and POLYNOME_UNDEFINED.
Referenced by make_polynome(), number_replaces_var(), polynome_dup(), polynome_gen_read(), polynome_monome_add(), and polynome_monome_addition().
Pmonome new_monome | ( | void | ) |
POLYNOME_INCLUDED.
cproto-generated files pnome-alloc.c
POLYNOME_INCLUDED.
allocation of an unitialized monome (to avoid various direct unchecked call to malloc)
(void) fprintf(stderr, "%10.3f MB", (sbrk(0) - etext)/(double)(1 << 20));
xit(-1);
Definition at line 48 of file pnome-alloc.c.
References abort, fprintf(), and malloc().
Referenced by make_monome(), monome_del_var(), monome_dup(), and monome_monome_div().
Ppolynome new_polynome | ( | void | ) |
allocation of an unitialized polynome (to avoid various direct unchecked call to malloc)
(void) fprintf(stderr, "%10.3f MB", (sbrk(0) - etext)/(double)(1 << 20));
xit(-1);
Definition at line 64 of file pnome-alloc.c.
References abort, fprintf(), and malloc().
Referenced by monome_to_new_polynome().
void polynome_add(Ppolynome* ppp, Ppolynome pp2) (*ppp) = (*ppp) + pp2.
!usage: polynome_add(&pp, pp2);
ppp | pp |
pp2 | p2 |
Definition at line 171 of file pnome-bin.c.
References polynome_dup(), polynome_monome, polynome_monome_add(), POLYNOME_NUL, POLYNOME_NUL_P, polynome_rm(), polynome_succ, POLYNOME_UNDEFINED, and POLYNOME_UNDEFINED_P.
Referenced by create_farkas_poly(), do_computation_intensity(), do_solve_hardware_constraints_on_volume(), edge_cost(), edge_cost_polynome(), enode_to_polynome(), expression_to_polynome(), make_causal_external(), make_causal_internal(), mapping_on_broadcast(), old_vecteur_to_polynome(), plc_make_distance(), plc_make_proto(), polynome_gen_read(), polynome_mult(), polynome_roots(), polynome_sigma(), polynome_sum_of_power(), polynome_var_subst(), size_of_regions(), and vecteur_mult().
Ppolynome polynome_addition(Ppolynome pp, Ppolynome pp2) pp = pp + pp2.
!usage: pp = polynome_add(pp, pp2);
pp | p |
pp2 | p2 |
Definition at line 195 of file pnome-bin.c.
References polynome_dup(), polynome_free(), polynome_monome, polynome_monome_addition(), POLYNOME_NUL, POLYNOME_NUL_P, polynome_succ, POLYNOME_UNDEFINED, and POLYNOME_UNDEFINED_P.
Referenced by complexity_add(), complexity_polynome_add(), complexity_sub(), and polynome_roots().
bool polynome_check(Ppolynome pp) Return true if all's right.
Check each monomial, make sure there's no nul or undefined monomial, then check unicity of each monomial.
Modification:
pp | p |
Definition at line 131 of file pnome-error.c.
References monome_check(), monome_colin(), polynome_monome, POLYNOME_NUL, POLYNOME_NUL_P, polynome_succ, and POLYNOME_UNDEFINED_P.
Referenced by complexity_check(), good_polynome_assert(), and is_polynome_a_monome().
void polynome_chg_var(Ppolynome *ppp, Variable v_old, Variable v_new) replace the variable v_old by v_new
Should it be comparated against MONOME_NUL (that is different of 0) instead?
ppp | pp |
v_old | _old |
v_new | _new |
Definition at line 264 of file pnome-unaires.c.
References monome_term, polynome_monome, POLYNOME_NUL, polynome_succ, and vect_chg_var().
bool polynome_constant_p(Ppolynome pp) return true if pp is a constant polynomial (including null polynomial) If pp is POLYNOME_UNDEFINED: abort.
[???]
polynome_constant_p: polynome is undefined
pp | p |
Definition at line 180 of file pnome-reduc.c.
References assert, monome_term, polynome_monome, POLYNOME_NUL, POLYNOME_NUL_P, polynome_succ, POLYNOME_UNDEFINED_P, TCST, VALUE_ONE, vect_equal(), vect_new(), and vect_rm().
Referenced by complexity_constant_p(), if_conv_init_statement(), and polynome_sum_of_power().
bool polynome_contains_var(Ppolynome pp, Variable var) PRIVATE returns true if variable var is in polynomial pp.
pp | p |
var | ar |
Definition at line 238 of file pnome-reduc.c.
References monome_term, polynome_monome, POLYNOME_NUL, polynome_succ, POLYNOME_UNDEFINED_P, and vect_coeff().
Referenced by complexity_sigma(), include_trans_in_poly(), and is_uniform_rec().
Ppolynome polynome_decr(Ppolynome pp) returns pp - 1.
pp is NOT duplicated.
pp | p |
Definition at line 246 of file pnome-scal.c.
References make_monome(), monome_rm(), polynome_monome_add(), POLYNOME_UNDEFINED, POLYNOME_UNDEFINED_P, TCST, and VALUE_ONE.
Referenced by add_constraint_on_x(), and make_causal_external().
int polynome_degree(Ppolynome pp, Variable var) returns the degree of polynomial pp viewed as a polynomial of one variable, var.
If pp is POLYNOME_UNDEFINED: abort. [???]
polynome_degree: polynome is undefined
pp | p |
var | ar |
Definition at line 93 of file pnome-reduc.c.
References assert, int, monome_term, polynome_monome, POLYNOME_NUL, polynome_succ, POLYNOME_UNDEFINED_P, and vect_coeff().
Referenced by polynome_roots(), and polynome_sigma().
Ppolynome polynome_div(Ppolynome pp1, Ppolynome pp2) returns p = pp1 / pp2.
pp1 | p1 |
pp2 | p2 |
Definition at line 381 of file pnome-bin.c.
References exit, fprintf(), is_single_monome, polynome_monome, polynome_monome_div(), POLYNOME_NUL, POLYNOME_NUL_P, POLYNOME_UNDEFINED, and POLYNOME_UNDEFINED_P.
Referenced by complexity_div(), expression_to_polynome(), polynome_power_n(), and polynome_roots().
Ppolynome polynome_dup(Ppolynome pp) creates and returns a copy of pp.
pp | p |
Definition at line 211 of file pnome-alloc.c.
References monome_dup(), monome_to_new_polynome(), polynome_monome, POLYNOME_NUL, POLYNOME_NUL_P, polynome_succ, POLYNOME_UNDEFINED, and POLYNOME_UNDEFINED_P.
Referenced by complexity_dup(), cutting_conditions(), do_computation_intensity(), is_not_trivial_p(), make_causal_external(), make_causal_internal(), old_polynome_to_sc(), plc_make_distance(), polynome_add(), polynome_addition(), polynome_equal(), polynome_gen_copy_tree(), polynome_monome_div(), polynome_monome_mult(), polynome_nth_root(), polynome_power_n(), polynome_roots(), polynome_sum_of_power(), polynome_to_new_complexity(), polynome_to_sc(), prgm_mapping(), prototype_var_subst(), search_scc_bdt(), and valuer().
bool polynome_equal(Ppolynome pp1, Ppolynome pp2) return (pp1 == pp2) >>>TO BE CONTINUED<<<
TO BE CONTINUED
pp1 | p1 |
pp2 | p2 |
Definition at line 257 of file pnome-reduc.c.
References default_is_inferior_pvarval(), polynome_dup(), polynome_error(), and polynome_sort().
void polynome_error | ( | const char * | name, |
char * | fmt, | ||
... | |||
) |
void polynome_error(va_dcl va_list): should be called to terminate execution and to core dump when data structures are corrupted or when an undefined operation is requested (zero divide for instance). polynome_error should be called as:
polynome_error(function_name, format, expression-list)
where function_name is a string containing the name of the function calling POLYNOME_ERROR, and where format and expression-list are passed as arguments to vprintf. POLYNOME_ERROR terminates execution with abort. Ex: polynome_error("polynome_power_n", "negative power: %d\n", p); ARARGS0
print name of function causing error
print out remainder of message
create a core file for debug
name | ame |
fmt | mt |
Definition at line 62 of file pnome-error.c.
References abort, and fprintf().
Referenced by Bernouilli(), factorielle(), monome_monome_div(), polynome_equal(), polynome_power_n(), polynome_roots(), polynome_sum_of_power(), and polynome_used_var().
Ppolynome polynome_factorize(Ppolynome pp, Variable var, int n) returns the (polynomial) coefficient of var^n in polynomial pp.
pp | p |
var | ar |
Definition at line 131 of file pnome-reduc.c.
References monome_del_var(), monome_term, polynome_monome, polynome_monome_add(), POLYNOME_NUL, polynome_succ, POLYNOME_UNDEFINED, POLYNOME_UNDEFINED_P, and vect_coeff().
Referenced by old_polynome_to_sc(), and polynome_sigma().
Ppolynome polynome_free(Ppolynome pp) frees space occupied by polynomial pp returns pp == POLYNOME_NUL !usage: polynome_rm(pp);.
correct?
pp | p |
Definition at line 191 of file pnome-alloc.c.
References free(), monome_rm(), polynome_monome, POLYNOME_NUL, polynome_succ, and POLYNOME_UNDEFINED_P.
Referenced by complexity_mult(), complexity_stats_add(), do_group_statement_constant(), polynome_addition(), polynome_monome_addition(), polynome_scalar_multiply(), and valuer().
Ppolynome polynome_incr(Ppolynome pp) returns pp + 1.
pp is NOT duplicated.
pp | p |
Definition at line 226 of file pnome-scal.c.
References make_monome(), monome_rm(), polynome_monome_add(), POLYNOME_UNDEFINED, POLYNOME_UNDEFINED_P, TCST, and VALUE_ONE.
int polynome_max_degree(Ppolynome pp) returns the degree of polynomial pp Let's hope there aren't too many negative powers...
If pp is POLYNOME_UNDEFINED: abort. [???]
polynome_degree: polynome is undefined
pp | p |
Definition at line 113 of file pnome-reduc.c.
References assert, int, monome_term, polynome_monome, POLYNOME_NUL, polynome_succ, POLYNOME_UNDEFINED, POLYNOME_UNDEFINED_P, and vect_sum().
Referenced by complexity_degree(), do_computation_intensity(), and polynomial_to_numerical().
There is no new polynomial malloc. Monomial pm doesn't become part of the polynomial: it is duplicated if needed. !usage: polynome_monome_add(&pp, pm);
This monomial is null now. We free it
no element in polynome
Save new value of monomial coefficient.
Add a copy of the monomial at the end
ppp | pp |
pm | m |
Definition at line 50 of file pnome-bin.c.
References good_polynome_assert(), monome_coeff, monome_colin(), monome_dup(), MONOME_NUL_P, monome_to_new_polynome(), MONOME_UNDEFINED_P, PNOME_MACH_EPS, polynome_monome, POLYNOME_NUL, POLYNOME_NUL_P, polynome_rm(), polynome_succ, POLYNOME_UNDEFINED, POLYNOME_UNDEFINED_P, and printf().
Referenced by do_solve_hardware_constraints_on_volume(), polynome_add(), polynome_decr(), polynome_factorize(), polynome_incr(), polynome_monome_div(), polynome_roots(), polynome_scalar_add(), polynome_sscanf(), and polynome_var_subst().
Ppolynome polynome_monome_addition(Ppolynome pp, Pmonome pm) PRIVATE Add monomial pm to polynomial pp, in place.
There is no new polynomial malloc. Monomial pm doesn't become part of the polynomial: it is duplicated if needed. !usage: pp = polynome_monome_add(pp, pm);
This monomial is null now. We free it
no element in polynome
Save new value of monomial coefficient.
Add a copy of the monomial at the end
pp | p |
pm | m |
Definition at line 112 of file pnome-bin.c.
References good_polynome_assert(), monome_coeff, monome_colin(), monome_dup(), MONOME_NUL_P, monome_to_new_polynome(), MONOME_UNDEFINED_P, PNOME_MACH_EPS, polynome_free(), polynome_monome, POLYNOME_NUL, POLYNOME_NUL_P, polynome_rm(), polynome_succ, POLYNOME_UNDEFINED, POLYNOME_UNDEFINED_P, and printf().
Referenced by polynome_addition(), and polynome_scalar_addition().
Ppolynome polynome_monome_div(Ppolynome pp, Pmonome pm) PRIVATE returns p = pp / pm.
pp | p |
pm | m |
Definition at line 356 of file pnome-bin.c.
References monome_monome_div(), MONOME_NUL_P, MONOME_UNDEFINED_P, polynome_dup(), polynome_monome, polynome_monome_add(), POLYNOME_NUL, POLYNOME_NUL_P, polynome_succ, POLYNOME_UNDEFINED, and POLYNOME_UNDEFINED_P.
Referenced by polynome_div().
Ppolynome polynome_monome_mult(Ppolynome pp, Pmonome pm) PRIVATE returns pp * pm.
pp | p |
pm | m |
Definition at line 266 of file pnome-bin.c.
References monome_monome_mult(), MONOME_NUL_P, MONOME_UNDEFINED_P, polynome_dup(), polynome_monome, POLYNOME_NUL, POLYNOME_NUL_P, polynome_succ, POLYNOME_UNDEFINED, and POLYNOME_UNDEFINED_P.
Referenced by polynome_mult(), and polynome_var_subst().
Ppolynome polynome_mult(Ppolynome pp1, Ppolynome pp2) returns pp1 * pp2.
pp1 | p1 |
pp2 | p2 |
Definition at line 287 of file pnome-bin.c.
References polynome_add(), polynome_monome, polynome_monome_mult(), POLYNOME_NUL, POLYNOME_NUL_P, polynome_rm(), polynome_succ, POLYNOME_UNDEFINED, and POLYNOME_UNDEFINED_P.
Referenced by complexity_mult(), edge_cost_polynome(), enode_to_polynome(), expression_to_polynome(), mapping_on_broadcast(), plc_make_distance(), plc_make_proto(), polynome_power_n(), polynome_roots(), polynome_sigma(), and size_of_regions().
void polynome_negate | ( | Ppolynome * | ppp | ) |
!usage: polynome_negate(&pp);
ppp | pp |
Definition at line 45 of file pnome-unaires.c.
References monome_coeff, polynome_monome, POLYNOME_NUL, POLYNOME_NUL_P, polynome_succ, and POLYNOME_UNDEFINED_P.
Referenced by do_computation_intensity(), expression_to_polynome(), make_causal_external(), make_causal_internal(), plc_make_distance(), polynome_roots(), and polynome_sigma().
computes the n-root of polynomial if possible, that is if all exponents are multiple of n return POLYNOME_UNDEFINED if not possible symbolically
Definition at line 177 of file pnome-scal.c.
References monome_coeff, monome_term, polynome_dup(), polynome_monome, POLYNOME_NUL_P, polynome_rm(), polynome_succ, POLYNOME_UNDEFINED, TCST, VECTEUR_NUL_P, vecteur_succ, vecteur_val, and vecteur_var.
Referenced by polynome_roots().
Ppolynome polynome_opposed(Ppolynome pp); changes sign of polynomial pp.
!usage: pp = polynome_negate(pp);
pp | p |
Definition at line 59 of file pnome-unaires.c.
References monome_coeff, polynome_monome, POLYNOME_NUL, POLYNOME_NUL_P, polynome_succ, and POLYNOME_UNDEFINED_P.
Referenced by complexity_sub().
Ppolynome polynome_power_n(Ppolynome pp, int n) returns pp ^ n (n>=0)
Modification:
FI: a unique return would be welcome! No enough time for cleaning
pp | p |
Definition at line 121 of file pnome-scal.c.
References is_polynome_a_monome(), make_polynome(), polynome_div(), polynome_dup(), polynome_error(), polynome_mult(), POLYNOME_NUL, POLYNOME_NUL_P, polynome_rm(), POLYNOME_UNDEFINED, POLYNOME_UNDEFINED_P, TCST, and VALUE_ONE.
Referenced by polynome_sigma(), polynome_sum_of_power(), polynome_var_subst(), and power_op_handler().
void polynome_rm | ( | Ppolynome * | ppp | ) |
void polynome_rm(Ppolynome* ppp) frees space occupied by polynomial *ppp returns *ppp pointing to POLYNOME_NUL !usage: polynome_rm(&pp);
correct?
ppp | pp |
Definition at line 170 of file pnome-alloc.c.
References free(), monome_rm(), polynome_monome, POLYNOME_NUL, polynome_succ, and POLYNOME_UNDEFINED_P.
Referenced by complexity_float_add(), complexity_sigma(), cutting_conditions(), do_computation_intensity(), do_solve_hardware_constraints_on_volume(), expression_to_polynome(), make_causal_external(), make_causal_internal(), make_single_var_complexity(), number_replaces_var(), polynome_add(), polynome_gen_free(), polynome_monome_add(), polynome_monome_addition(), polynome_mult(), polynome_nth_root(), polynome_power_n(), polynome_roots(), polynome_scalar_mult(), polynome_sigma(), polynome_sum_of_power(), polynome_var_subst(), power_op_handler(), reference_to_polynome(), and simplify_expression().
should we verify the other components are equal to zero ?
gather a x var + b information
the root is -b/a
gather a x^2 + b x + c informations
compute determinant
delta =-4 a c
take its square root if possible
the roots are (-b +sqdelta) / 2a and (-b -sqdelta) / 2a
var | ar |
Definition at line 48 of file pnome-root.c.
References monome_dup(), monome_rm(), monome_term, polynome_add(), polynome_addition(), polynome_degree(), polynome_div(), polynome_dup(), polynome_error(), polynome_monome, polynome_monome_add(), polynome_mult(), polynome_negate(), polynome_nth_root(), POLYNOME_NUL, polynome_rm(), polynome_scalar_mult(), polynome_scalar_multiply(), polynome_succ, POLYNOME_UNDEFINED_P, TCST, VALUE_ZERO, vect_add_elem(), vect_chg_var(), vect_coeff(), vect_del_var(), vect_new(), vect_size(), VECTEUR_NUL, and VECTEUR_UNDEFINED.
Referenced by do_solve_hardware_constraints_on_volume().
void polynome_scalar_add | ( | Ppolynome * | , |
double | |||
) |
void polynome_scalar_mult | ( | Ppolynome * | , |
double | |||
) |
Ppolynome polynome_sigma(Ppolynome pp, Variable var, Ppolynome ppinf, ppsup) returns the sum of pp when its variable var is moving from ppinf to ppsup.
Neither ppinf nor ppsup must contain variable var.
compute: sum(ppinf,ppsup) ppfact * x ^ i as: ppfact * ( sum(1, ppsup) x ^ i - sum(1, ppinf) x ^ i + ppfin ^ i ) where: ppfact is the term associated to x ^ i in pp
Note that this decomposition is correct wrt standard mathematical notations if and only if: ppsup >= ppinf >= 1 although the correct answer can be obtained when ppsup >= ppinf
Thus: sum(1, ppsup) x ^ i is extended for ppsup < 1 and defined as:
LZ: if ppinf == 1: no need to compute next sigma (pptemp), nor ppinf^i (FI: apparently not implemented)
ppacc = sigma{1,ppsup} - sigma{1,ppinf}
ppacc == (sigma{k=1,ppsup} k^i) - (sigma{k=1,ppinf} k^i)
pp | p |
var | ar |
ppinf | pinf |
ppsup | psup |
Definition at line 160 of file pnome-unaires.c.
References polynome_add(), polynome_degree(), polynome_factorize(), polynome_mult(), polynome_negate(), POLYNOME_NUL, POLYNOME_NUL_P, polynome_power_n(), polynome_rm(), polynome_sum_of_power(), POLYNOME_UNDEFINED, and POLYNOME_UNDEFINED_P.
Referenced by complexity_sigma().
Ppolynome polynome_sscanf(char *sp, (*name_to_variable)()) converts into polynomial structure the expression passed in ASCII form in string sp.
(for debug only) pas vraiment quick mais bien dirty
printf(stderr, "\ns='%s'\n", s);
printf(stderr, "au milieu: s='%s'\n", s);
sp | p |
Definition at line 359 of file pnome-io.c.
References float_to_value, make_monome(), MONOME_NUL_P, monome_rm(), monome_term, name_to_variable(), parse_coeff(), parse_var_name(), polynome_monome_add(), POLYNOME_NUL, remove_blanks(), strdup(), VALUE_ONE, and vect_add_elem().
Ppolynome polynome_sum_of_power(Ppolynome ppsup, int p) calculates the sum of i^p for i=1 to (ppsup), returns the polynomial sigma{i=1, ppsup} (i^p).
It does the job well until p=13; after, it goes wrong (the Bernouilli numbers are computed until p=12)
if the upper bound is constant ...
FI: That means, no iteration is executed whatsoever, isn't it?
Also, polynome_error() does stop the execution and we are in trouble for Linear/C3 Library. We should init some exit function towards pips_internal_error().
lse if (cste==1) ppresult = POLYNOME_NUL;
if the upper bound is a non-constant polynomial ...
(ppsup^(p+1)) / (p+1)
1/2 * ppsup^p
computes factors p(p-1).../(2i!) incrementally
the current term of the remaining of the sum is:
Ti = (1/(2i)!)*(Bi*p*(p-1)* . *(p-2*i+2)*ppsup^(p-2*i+1))
ppsup | psup |
Definition at line 79 of file pnome-unaires.c.
References Bernouilli(), intpower(), make_polynome(), polynome_add(), polynome_constant_p(), polynome_dup(), polynome_error(), POLYNOME_NUL, polynome_power_n(), polynome_rm(), polynome_scalar_mult(), polynome_TCST(), POLYNOME_UNDEFINED, POLYNOME_UNDEFINED_P, TCST, and VALUE_ONE.
Referenced by polynome_sigma().
float polynome_TCST | ( | Ppolynome | pp | ) |
float polynome_TCST(Ppolynome pp) returns the constant term of polynomial pp.
If pp is POLYNOME_UNDEFINED: abort. [???]
polynome_TCST: polynome is undefined
pp | p |
Definition at line 156 of file pnome-reduc.c.
References assert, monome_coeff, monome_term, polynome_monome, POLYNOME_NUL, polynome_succ, POLYNOME_UNDEFINED_P, TCST, VALUE_ONE, vect_equal(), vect_new(), and vect_rm().
Referenced by complexity_TCST(), if_conv_init_statement(), old_prototype_factorize(), polynome_sum_of_power(), and prototype_factorize().
the monomial curpm contains the variable var.
We duplicate it, remove variable var from it,
we multiply it with ppsubst^n (where n was the
power of var), and we add the result to newpp.
pp | p |
var | ar |
ppsubst | psubst |
Definition at line 47 of file pnome-reduc.c.
References monome_del_var(), monome_rm(), monome_term, polynome_add(), polynome_monome, polynome_monome_add(), polynome_monome_mult(), POLYNOME_NUL, polynome_power_n(), polynome_rm(), polynome_succ, POLYNOME_UNDEFINED, POLYNOME_UNDEFINED_P, and vect_coeff().
Referenced by complexity_var_subst(), number_replaces_var(), and prototype_var_subst().
===========================================================================
Ppolynome vecteur_to_polynome(Pvecteur pv): translates a Pvecteur into a Ppolynome.
pv | v |
Definition at line 406 of file pnome-bin.c.
References make_polynome(), POLYNOME_NUL, polynome_succ, Svecteur::succ, VALUE_ONE, VALUE_TO_FLOAT, VECTEUR_NUL_P, vecteur_val, and vecteur_var.
Referenced by include_trans_in_sc(), mapping_on_broadcast(), plc_make_distance(), and vvs_on_polynome().