PIPS
polynome.h File Reference
+ This graph shows which files directly or indirectly include this file:

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 SmonomePmonome
 
typedef struct Spolynome Spolynome
 
typedef struct SpolynomePpolynome
 

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...
 

Macro Definition Documentation

◆ is_single_monome

#define is_single_monome (   pp)    ((!POLYNOME_NUL_P(pp)) && (POLYNOME_NUL_P(polynome_succ(pp))))

Definition at line 157 of file polynome.h.

◆ MAX_NAME_LENGTH

#define MAX_NAME_LENGTH   50

Definition at line 181 of file polynome.h.

◆ monome_coeff

#define monome_coeff (   pm)    ((pm)->coeff)

Macros definitions.

Definition at line 150 of file polynome.h.

◆ MONOME_COEFF_MULTIPLY_SYMBOL

#define MONOME_COEFF_MULTIPLY_SYMBOL   "*"

Definition at line 174 of file polynome.h.

◆ monome_constant_new

#define monome_constant_new (   coeff)    make_monome(coeff, TCST, 1)

Definition at line 159 of file polynome.h.

◆ MONOME_CONSTANT_P

#define MONOME_CONSTANT_P (   pm)    (term_cst((pm)->term))

Definition at line 167 of file polynome.h.

◆ MONOME_NUL

#define MONOME_NUL   ((Pmonome) -256)

Null/undefined, monomial/polynomial definitions.

Definition at line 163 of file polynome.h.

◆ MONOME_NUL_P

#define MONOME_NUL_P (   pm)    ((pm)==MONOME_NUL)

Definition at line 164 of file polynome.h.

◆ MONOME_NUL_SYMBOL

#define MONOME_NUL_SYMBOL   "<monome nul>"

Definition at line 178 of file polynome.h.

◆ monome_power1_new

#define monome_power1_new (   coeff,
  var 
)    make_monome(coeff, var, 1)

Definition at line 160 of file polynome.h.

◆ monome_term

#define monome_term (   pm)    ((pm)->term)

Definition at line 151 of file polynome.h.

◆ MONOME_UNDEFINED

#define MONOME_UNDEFINED   ((Pmonome) -252)

Definition at line 165 of file polynome.h.

◆ MONOME_UNDEFINED_P

#define MONOME_UNDEFINED_P (   pm)    ((pm)==MONOME_UNDEFINED)

Definition at line 166 of file polynome.h.

◆ MONOME_UNDEFINED_SYMBOL

#define MONOME_UNDEFINED_SYMBOL   "<monome undefined>"

Definition at line 179 of file polynome.h.

◆ MONOME_VAR_MULTIPLY_SYMBOL

#define MONOME_VAR_MULTIPLY_SYMBOL   "."

Definition at line 175 of file polynome.h.

◆ PNOME_FLOAT_N_DECIMALES

#define PNOME_FLOAT_N_DECIMALES   2 /**nb of figures after point for coeffs */

Definition at line 184 of file polynome.h.

◆ PNOME_FLOAT_TO_EXP_LEVEL

#define PNOME_FLOAT_TO_EXP_LEVEL   1E8 /**numbers >1E8 are printed with exponent */

Definition at line 185 of file polynome.h.

◆ PNOME_FLOAT_TO_FRAC_LEVEL

#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.

◆ PNOME_MACH_EPS

#define PNOME_MACH_EPS   1E-8 /**below this value, a float is null */

Definition at line 183 of file polynome.h.

◆ POLYNOME_INCLUDED

#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.

◆ polynome_monome

#define polynome_monome (   pp)    ((pp)->monome)

Definition at line 152 of file polynome.h.

◆ POLYNOME_NUL

#define POLYNOME_NUL   ((Ppolynome) NULL)

Definition at line 169 of file polynome.h.

◆ POLYNOME_NUL_P

#define POLYNOME_NUL_P (   pp)    ((pp)==POLYNOME_NUL)

Definition at line 170 of file polynome.h.

◆ POLYNOME_NUL_SYMBOL

#define POLYNOME_NUL_SYMBOL   "0"

Definition at line 176 of file polynome.h.

◆ polynome_succ

#define polynome_succ (   pp)    ((pp)->succ)

Definition at line 153 of file polynome.h.

◆ POLYNOME_UNDEFINED

#define POLYNOME_UNDEFINED   ((Ppolynome) -248)

Definition at line 171 of file polynome.h.

◆ POLYNOME_UNDEFINED_P

#define POLYNOME_UNDEFINED_P (   pp)    ((pp)==POLYNOME_UNDEFINED)

Definition at line 172 of file polynome.h.

◆ POLYNOME_UNDEFINED_SYMBOL

#define POLYNOME_UNDEFINED_SYMBOL   "<polynome undefined>"

Definition at line 177 of file polynome.h.

Typedef Documentation

◆ Pmonome

typedef struct Smonome * Pmonome

◆ Ppolynome

typedef struct Spolynome * Ppolynome

◆ Smonome

typedef struct Smonome Smonome

◆ Spolynome

typedef struct Spolynome Spolynome

Function Documentation

◆ Bernouilli()

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.

110 {
111  switch (i) {
112  case 1: return((float) 1/6);
113  case 2: return((float) 1/30);
114  case 3: return((float) 1/42);
115  case 4: return((float) 1/30);
116  case 5: return((float) 5/66);
117  case 6: return((float) 691/2730);
118  case 7: return((float) 7/6);
119  case 8: return((float) 3617/510);
120  case 9: return((float) 43867/798);
121  case 10: return((float) 174611/330);
122  case 11: return((float) 854513/138);
123  case 12: return((float) 236364091/2730);
124  default: polynome_error("Bernouilli(i)", "i=%d illegal\n", i);
125  /* later, we could compute bigger Bernouilli(i) with the recurrence */
126  }
127  /* To please the gcc compiler */
128  return 0.;
129 }
void polynome_error(const char *name, char *fmt,...)
INTLIBRARY.
Definition: pnome-error.c:62

References polynome_error().

Referenced by polynome_sum_of_power().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ default_is_inferior_pvarval()

int default_is_inferior_pvarval ( Pvecteur pvarval1,
Pvecteur pvarval2 
)

bool default_is_inferior_pvarval(Pvecteur * pvarval1, Pvecteur * pvarval2) return true if var1 is before var2, lexicographically, according to the "default_variable_name" naming.

Parameters
pvarval1varval1
pvarval2varval2

Definition at line 286 of file pnome-io.c.

287 {
288  return strcmp(default_variable_name(vecteur_var(* pvarval1)),
289  default_variable_name(vecteur_var(* pvarval2)));
290 }
char * default_variable_name(Variable var)
char *default_variable_name(Variable var) returns for variable var the name "Vxxxx" where xxxx are fo...
Definition: pnome-io.c:242
#define vecteur_var(v)

References default_variable_name(), and vecteur_var.

Referenced by block_to_complexity(), final_statement_to_complexity_evaluation(), and polynome_equal().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ default_is_inferior_var()

int default_is_inferior_var ( Variable  var1,
Variable  var2 
)

bool default_is_inferior_var(Variable var1, Variable var2) return true if var1 is before var2, lexicographically, according to the "default_variable_name" naming.

Parameters
var1ar1
var2ar2

Definition at line 265 of file pnome-io.c.

267 {
268  return strcmp(default_variable_name(var1),
269  default_variable_name(var2));
270 }

References default_variable_name().

+ Here is the call graph for this function:

◆ default_is_inferior_varval()

int default_is_inferior_varval ( Pvecteur  varval1,
Pvecteur  varval2 
)

bool default_is_inferior_varval(Pvecteur varval1, Pvecteur varval2) return true if var1 is before var2, lexicographically, according to the "default_variable_name" naming.

Parameters
varval1arval1
varval2arval2

Definition at line 276 of file pnome-io.c.

277 {
278  return strcmp(default_variable_name(vecteur_var(varval1)),
280 }

References default_variable_name(), and vecteur_var.

+ Here is the call graph for this function:

◆ default_variable_name()

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...

Parameters
varar

Definition at line 242 of file pnome-io.c.

244 {
245  char *s = (char *) malloc(6);
246  int i = (intptr_t) var;
247 
248  if (var != TCST) {
249  sprintf(s, "V%c%c%c%c",
250  (char) 93 + (i % 26),
251  (char) 93 + ((i / 26) % 26),
252  (char) 93 + ((i / 26 / 26) % 26),
253  (char) 93 + ((i / 26 / 26 / 26) % 26));
254  }
255  else
256  sprintf(s, "TCST");
257  return(s);
258 }
void * malloc(YYSIZE_T)
#define intptr_t
Definition: stdint.in.h:294
#define TCST
VARIABLE REPRESENTANT LE TERME CONSTANT.

References intptr_t, malloc(), and TCST.

Referenced by default_is_inferior_pvarval(), default_is_inferior_var(), and default_is_inferior_varval().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ factorielle()

int factorielle ( int  n)

int factorielle (int n) PRIVATE returns n!

Definition at line 136 of file pnome-private.c.

138 {
139  int fact = -1;
140 
141  if (n<0)
142  polynome_error("factorielle", "n=%d", n);
143  else if (n<2)
144  fact = 1;
145  else
146  fact = factorielle(n-1) * n;
147 
148  return fact;
149 }
int factorielle(int n)
int factorielle (int n) PRIVATE returns n!

References polynome_error().

Referenced by average_probability_matrix().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ float_to_frac()

void float_to_frac ( double  ,
char **   
)

◆ good_polynome_assert()

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.

Parameters
functionunction

Definition at line 84 of file pnome-error.c.

85 {
86  va_list args;
87  Ppolynome pp;
88 
89  va_start(args, function);
90  pp = va_arg(args, Ppolynome);
91 
92  if (polynome_check(pp)) return;
93 
94  fprintf(stderr, "Bad internal polynomial representation in %s\n", function);
95  va_end(args);
96  abort();
97 }
#define abort()
Definition: misc-local.h:53
bool polynome_check(Ppolynome pp)
bool polynome_check(Ppolynome pp) Return true if all's right.
Definition: pnome-error.c:131
int fprintf()
test sc_min : ce test s'appelle par : programme fichier1.data fichier2.data ...

References abort, fprintf(), and polynome_check().

Referenced by polynome_monome_add(), and polynome_monome_addition().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ intpower()

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.

158 {
159  if (n>0)
160  return (intpower(d, n-1) * d);
161  else if (n==0)
162  return((double) 1);
163  else
164  return (intpower(d, n+1) / d);
165 }
double intpower(double d, int n)
double intpower(double d, int n) returns d^n for all integers n

Referenced by float_to_frac(), and polynome_sum_of_power().

+ Here is the caller graph for this function:

◆ is_inferior_monome()

bool is_inferior_monome ( Pmonome  ,
Pmonome  ,
int(*)(Pvecteur *, Pvecteur *)   
)

◆ is_polynome_a_monome()

bool is_polynome_a_monome ( Ppolynome  pp)

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

Parameters
ppp

Definition at line 162 of file pnome-error.c.

164 {
165  if ( ! polynome_check(pp) )
166  return (false);
167  else if ( pp != POLYNOME_NUL && polynome_succ(pp) == POLYNOME_NUL )
168  return (true);
169  else
170  return (false);
171 }
#define POLYNOME_NUL
#define polynome_succ(pp)

References polynome_check(), POLYNOME_NUL, and polynome_succ.

Referenced by polynome_power_n().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ make_monome()

Pmonome make_monome ( float  coeff,
Variable  var,
Value  expo 
)

Pmonome make_monome(float coeff, Variable var, Value expo) PRIVATE allocates space for, and creates, the monome "coeff*var^expo".

Parameters
coeffoeff
varar
expoxpo

Definition at line 81 of file pnome-alloc.c.

82 {
83  if (coeff == 0)
84  return MONOME_NUL;
85 
86  Pmonome pm = new_monome();
87  monome_coeff(pm) = coeff;
88  if (value_zero_p(expo))
90  else
91  monome_term(pm) = vect_new(var, expo);
92 
93  return pm;
94 }
#define value_zero_p(val)
#define VALUE_ONE
Pmonome new_monome()
INTLIBRARY.
Definition: pnome-alloc.c:48
#define monome_term(pm)
#define monome_coeff(pm)
Macros definitions.
#define MONOME_NUL
Null/undefined, monomial/polynomial definitions.
Pvecteur vect_new(Variable var, Value coeff)
Pvecteur vect_new(Variable var,Value coeff): allocation d'un vecteur colineaire au vecteur de base va...
Definition: alloc.c:110

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ make_polynome()

Ppolynome make_polynome ( float  coeff,
Variable  var,
Value  expo 
)

Ppolynome make_polynome(float coeff, Variable var, Value expo) PRIVATE allocates space for, and creates, the polynome "coeff*var^expo".

Parameters
coeffoeff
varar
expoxpo

Definition at line 100 of file pnome-alloc.c.

101 {
102  Pmonome m = make_monome(coeff, var, expo);
105  return p;
106 }
#define assert(ex)
Definition: newgen_assert.h:41
Ppolynome monome_to_new_polynome(Pmonome pm)
Ppolynome monome_to_new_polynome(Pmonome pm) PRIVATE allocates space for, and creates the polynomial ...
Definition: pnome-alloc.c:115
Pmonome make_monome(float coeff, Variable var, Value expo)
Pmonome make_monome(float coeff, Variable var, Value expo) PRIVATE allocates space for,...
Definition: pnome-alloc.c:81
#define MONOME_UNDEFINED_P(pm)

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ monome_check()

bool monome_check ( Pmonome  pm)

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:

  • MONOME_NUL means 0 monome, and it's a good monome. LZ 10/10/91
Parameters
pmm

Definition at line 110 of file pnome-error.c.

112 {
113  if ( MONOME_UNDEFINED_P(pm) )
114  return (false);
115  else if (MONOME_NUL_P(pm) )
116  return (true);
117  else
118  return ((monome_coeff(pm) != 0) &&
119  !VECTEUR_NUL_P(monome_term(pm)) &&
120  vect_check(monome_term(pm)));
121 }
bool vect_check(Pvecteur cv)
bool vect_check(Pvecteur v): renvoie true si le vecteur v est coherent avec les specifications du pac...
Definition: reductions.c:529
#define MONOME_NUL_P(pm)
#define VECTEUR_NUL_P(v)

References monome_coeff, MONOME_NUL_P, monome_term, MONOME_UNDEFINED_P, vect_check(), and VECTEUR_NUL_P.

Referenced by polynome_check().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ monome_colin()

bool monome_colin ( Pmonome  pm1,
Pmonome  pm2 
)

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. [???]

Parameters
pm1m1
pm2m2

Definition at line 77 of file pnome-private.c.

79 {
80  if (MONOME_UNDEFINED_P(pm1) || MONOME_UNDEFINED_P(pm2)
81  || MONOME_NUL_P(pm1) || MONOME_NUL_P(pm2))
82  return(pm1 == pm2);
83  else
84  return(vect_equal(monome_term(pm1), monome_term(pm2)));
85 }
bool vect_equal(Pvecteur v1, Pvecteur v2)
bool vect_equal(Pvecteur v1, Pvecteur v2): test a egalite de deux vecteurs
Definition: reductions.c:278

References MONOME_NUL_P, monome_term, MONOME_UNDEFINED_P, and vect_equal().

Referenced by polynome_check(), polynome_monome_add(), and polynome_monome_addition().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ monome_del_var()

Pmonome monome_del_var ( Pmonome  pm,
Variable  var 
)

pnome-private.c

pnome-private.c

is it the only variable

now it is a constant term

Parameters
pmm
varar

Definition at line 47 of file pnome-private.c.

50 {
51  if (MONOME_UNDEFINED_P(pm))
52  return (MONOME_UNDEFINED);
53  else if (MONOME_NUL_P(pm))
54  return (MONOME_NUL);
55  else {
56  Pmonome newpm = new_monome();
57 
58  monome_coeff(newpm) = monome_coeff(pm);
59  monome_term(newpm) = vect_del_var(monome_term(pm), var);
60  if (VECTEUR_NUL_P(monome_term(newpm))) {
61  /* is it the only variable */
62  monome_term(newpm) = vect_new(TCST, VALUE_ONE);
63  /* now it is a constant term */
64  }
65 
66  return(newpm);
67  }
68 }
#define MONOME_UNDEFINED
Pvecteur vect_del_var(Pvecteur v_in, Variable var)
Pvecteur vect_del_var(Pvecteur v_in, Variable var): allocation d'un nouveau vecteur egal a la project...
Definition: unaires.c:206

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ monome_dup()

Pmonome monome_dup ( Pmonome  pm)

Pmonome monome_dup(Pmonome pm) PRIVATE creates and returns a copy of pm.

Parameters
pmm

Definition at line 132 of file pnome-alloc.c.

134 {
135  if (MONOME_NUL_P(pm))
136  return (MONOME_NUL);
137  else if (MONOME_UNDEFINED_P(pm))
138  return (MONOME_UNDEFINED);
139  else {
140  Pmonome pmd = new_monome();
141  monome_coeff(pmd) = monome_coeff(pm);
142  monome_term(pmd) = vect_dup(monome_term(pm));
143  return(pmd);
144  }
145 }
Pvecteur vect_dup(Pvecteur v_in)
Pvecteur vect_dup(Pvecteur v_in): duplication du vecteur v_in; allocation de et copie dans v_out;.
Definition: alloc.c:51

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ monome_equal()

bool monome_equal ( Pmonome  pm1,
Pmonome  pm2 
)

bool monome_equal(Pmonome pm1, Pmonome pm2) PRIVATE returns true if the two monomials are equal same coeff., same variables, same exponents.

Parameters
pm1m1
pm2m2

Definition at line 93 of file pnome-private.c.

95 {
96  if (MONOME_UNDEFINED_P(pm1) || MONOME_UNDEFINED_P(pm2)
97  || MONOME_NUL_P(pm1) || MONOME_NUL_P(pm2))
98  return(pm1 == pm2);
99  else
100  return(vect_equal(monome_term(pm1), monome_term(pm2))
101  && ((monome_coeff(pm1) == monome_coeff(pm2))));
102 }

References monome_coeff, MONOME_NUL_P, monome_term, MONOME_UNDEFINED_P, and vect_equal().

+ Here is the call graph for this function:

◆ monome_fprint()

void monome_fprint ( FILE *  ,
Pmonome  ,
Pbase  ,
bool  ,
char *  *)(Variable 
)

◆ monome_monome_div()

Pmonome monome_monome_div ( Pmonome  pm1,
Pmonome  pm2 
)

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

Parameters
pm1m1
pm2m2

Definition at line 314 of file pnome-bin.c.

316 {
317  if (MONOME_UNDEFINED_P(pm1))
318  return (MONOME_UNDEFINED);
319  else if (MONOME_UNDEFINED_P(pm2)) {
320  monome_rm(&pm1);
321  return (MONOME_UNDEFINED);
322  }
323  else if (!MONOME_NUL_P(pm1)) {
324  if (MONOME_NUL_P(pm2)) {
325  monome_rm(&pm1); /* returns ppm pointing to MONOME_NUL */
326  return (MONOME_UNDEFINED);
327  }
328  else {
329  Pmonome pmr = new_monome();
330 
331  if (MONOME_CONSTANT_P(pm2))
332  monome_term(pmr) = vect_dup(monome_term(pm1));
333  else if (MONOME_CONSTANT_P(pm1)) {
334  Pvecteur pv = vect_dup(monome_term(pm2));
335  vect_chg_sgn(pv);
336  monome_term(pmr) = pv;
337  }
338  else {
340  if ( monome_term(pmr) == VECTEUR_NUL )
342  }
343  monome_coeff(pmr) = monome_coeff(pm1)/monome_coeff(pm2);
344 
345  return (pmr);
346  }
347  }
348  polynome_error("monome_monome_div","Unreachable...\n");
349  return MONOME_UNDEFINED;
350 }
void monome_rm(Pmonome *ppm)
void monome_rm(Pmonome* ppm) PRIVATE frees space occupied by monomial *ppm returns *ppm pointing to M...
Definition: pnome-alloc.c:154
#define MONOME_CONSTANT_P(pm)
void vect_chg_sgn(Pvecteur v)
void vect_chg_sgn(Pvecteur v): multiplie v par -1
Definition: scalaires.c:151
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
Definition: vecteur-local.h:89
#define VECTEUR_NUL
DEFINITION DU VECTEUR NUL.
Pvecteur vect_substract(Pvecteur v1, Pvecteur v2)
Pvecteur vect_substract(Pvecteur v1, Pvecteur v2): allocation d'un vecteur v dont la valeur est la di...
Definition: binaires.c:75

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ monome_rm()

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);

Parameters
ppmpm

Definition at line 154 of file pnome-alloc.c.

156 {
157  if ((!MONOME_NUL_P(*ppm)) && (!MONOME_UNDEFINED_P(*ppm))) {
158  vect_rm((Pvecteur) monome_term(*ppm));
159  free((char *) *ppm);
160  }
161  *ppm = MONOME_NUL;
162 }
void free(void *)
void vect_rm(Pvecteur v)
void vect_rm(Pvecteur v): desallocation des couples de v;
Definition: alloc.c:78

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ monome_sprint()

char* monome_sprint ( Pmonome  ,
Pbase  ,
bool  ,
char *  *)(Variable 
)

◆ monome_to_new_polynome()

Ppolynome monome_to_new_polynome ( Pmonome  pm)

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.

Parameters
pmm

Definition at line 115 of file pnome-alloc.c.

116 {
117  if (MONOME_NUL_P(pm))
118  return POLYNOME_NUL;
119  else if (MONOME_UNDEFINED_P(pm))
120  return POLYNOME_UNDEFINED;
121 
122  Ppolynome pp = new_polynome();
123  polynome_monome(pp) = pm;
125  return pp;
126 }
Ppolynome new_polynome()
allocation of an unitialized polynome (to avoid various direct unchecked call to malloc)
Definition: pnome-alloc.c:64
#define POLYNOME_UNDEFINED
#define polynome_monome(pp)

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ new_monome()

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.

49 {
50  Pmonome pm = (Pmonome) malloc(sizeof(Smonome));
51  if (pm == NULL) {
52  (void) fprintf(stderr,"new_monome: Out of memory space\n");
53  /* (void) fprintf(stderr, "%10.3f MB",
54  (sbrk(0) - etext)/(double)(1 << 20)); */
55  abort();
56  /*exit(-1);*/
57  }
58  return pm;
59 }
struct Smonome * Pmonome

References abort, fprintf(), and malloc().

Referenced by make_monome(), monome_del_var(), monome_dup(), and monome_monome_div().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ new_polynome()

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.

65 {
66  Ppolynome pp = (Ppolynome) malloc(sizeof(Spolynome));
67  if (pp == NULL) {
68  (void) fprintf(stderr,"new_polynome: Out of memory space\n");
69  /* (void) fprintf(stderr, "%10.3f MB",
70  (sbrk(0) - etext)/(double)(1 << 20)); */
71  abort();
72  /*exit(-1);*/
73  }
74  return pp;
75 }
struct Spolynome * Ppolynome

References abort, fprintf(), and malloc().

Referenced by monome_to_new_polynome().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ number_replaces_var()

Ppolynome number_replaces_var ( Ppolynome  ,
Variable  ,
double   
)

◆ polynome_add()

void polynome_add ( Ppolynome ppp,
Ppolynome  pp2 
)

void polynome_add(Ppolynome* ppp, Ppolynome pp2) (*ppp) = (*ppp) + pp2.

!usage: polynome_add(&pp, pp2);

Parameters
ppppp
pp2p2

Definition at line 171 of file pnome-bin.c.

173 {
174  if (POLYNOME_NUL_P(*ppp)) {
175  if ( !POLYNOME_NUL_P(pp2))
176  *ppp = polynome_dup(pp2);
177  else
178  *ppp = POLYNOME_NUL;
179  }
180  else if (POLYNOME_UNDEFINED_P(pp2)) {
181  polynome_rm(ppp);
182  *ppp = POLYNOME_UNDEFINED;
183  }
184  else if (!POLYNOME_UNDEFINED_P(*ppp)) {
185  for (;pp2 != POLYNOME_NUL; pp2 = polynome_succ(pp2)) {
187  }
188  }
189 }
Ppolynome polynome_dup(Ppolynome pp)
Ppolynome polynome_dup(Ppolynome pp) creates and returns a copy of pp.
Definition: pnome-alloc.c:211
void polynome_rm(Ppolynome *ppp)
void polynome_rm(Ppolynome* ppp) frees space occupied by polynomial *ppp returns *ppp pointing to POL...
Definition: pnome-alloc.c:170
void polynome_monome_add(Ppolynome *ppp, Pmonome pm)
void polynome_monome_add(Ppolynome* ppp, Pmonome pm) PRIVATE Add monomial pm to polynomial *ppp,...
Definition: pnome-bin.c:50
#define POLYNOME_UNDEFINED_P(pp)
#define POLYNOME_NUL_P(pp)

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_addition()

Ppolynome polynome_addition ( Ppolynome  pp,
Ppolynome  pp2 
)

Ppolynome polynome_addition(Ppolynome pp, Ppolynome pp2) pp = pp + pp2.

!usage: pp = polynome_add(pp, pp2);

Parameters
ppp
pp2p2

Definition at line 195 of file pnome-bin.c.

197 {
199 
200  if (POLYNOME_NUL_P(pp)) {
201  if ( !POLYNOME_NUL_P(pp2))
202  newpp = polynome_dup(pp2);
203  else
204  newpp = POLYNOME_NUL;
205  }
206  else if (POLYNOME_UNDEFINED_P(pp2)) {
207  pp = polynome_free(pp);
208  newpp = POLYNOME_UNDEFINED;
209  }
210  else if (!POLYNOME_UNDEFINED_P(pp)) {
211  newpp = pp;
212  for (;pp2 != POLYNOME_NUL; pp2 = polynome_succ(pp2)) {
213  newpp = polynome_monome_addition(newpp, polynome_monome(pp2));
214  }
215  }
216  return newpp;
217 }
Ppolynome polynome_free(Ppolynome pp)
Ppolynome polynome_free(Ppolynome pp) frees space occupied by polynomial pp returns pp == POLYNOME_NU...
Definition: pnome-alloc.c:191
Ppolynome polynome_monome_addition(Ppolynome pp, Pmonome pm)
Ppolynome polynome_monome_addition(Ppolynome pp, Pmonome pm) PRIVATE Add monomial pm to polynomial pp...
Definition: pnome-bin.c:112

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_check()

bool polynome_check ( Ppolynome  pp)

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:

  • POLYNOME_NUL means 0 polynome, and it's a good one. LZ 10/10/91
Parameters
ppp

Definition at line 131 of file pnome-error.c.

133 {
134  if ( POLYNOME_UNDEFINED_P(pp) )
135  return (false);
136  if ( POLYNOME_NUL_P(pp) )
137  return (true);
138  else {
139  Ppolynome curpp, curpp2;
140 
141  for (curpp = pp; curpp != POLYNOME_NUL; curpp = polynome_succ(curpp)) {
142  if ( !monome_check(polynome_monome(curpp)) ) {
143  return (false);
144  }
145  for (curpp2 = polynome_succ(curpp); curpp2 != POLYNOME_NUL;
146  curpp2 = polynome_succ(curpp2))
147  if (monome_colin(polynome_monome(curpp),polynome_monome(curpp2)))
148  return (false);
149  }
150  return (true);
151  }
152 }
bool monome_check(Pmonome pm)
bool monome_check(Pmonome pm) Return true if all's right.
Definition: pnome-error.c:110
bool monome_colin(Pmonome pm1, Pmonome pm2)
bool monome_colin(Pmonome pm1, Pmonome pm2) PRIVATE returns true if the two monomials are "colinear":...
Definition: pnome-private.c:77

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_chg_var()

void polynome_chg_var ( Ppolynome ppp,
Variable  v_old,
Variable  v_new 
)

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?

Parameters
ppppp
v_old_old
v_new_new

Definition at line 264 of file pnome-unaires.c.

267 {
268  Ppolynome ppcur;
269 
270  for (ppcur = *ppp; ppcur != POLYNOME_NUL; ppcur = polynome_succ(ppcur)) {
271  Pmonome pmcur = polynome_monome(ppcur);
272  /* Should it be comparated against MONOME_NUL (that is different
273  of 0) instead? */
274  if ( pmcur != NULL ) {
275  Pvecteur pvcur = monome_term(pmcur);
276 
277  vect_chg_var(&pvcur,v_old,v_new);
278  }
279  }
280 }
void vect_chg_var(Pvecteur *ppv, Variable v_old, Variable v_new)
void vect_chg_var(Pvecteur *ppv, Variable v_old, Variable v_new) replace the variable v_old by v_new
Definition: unaires.c:168

References monome_term, polynome_monome, POLYNOME_NUL, polynome_succ, and vect_chg_var().

+ Here is the call graph for this function:

◆ polynome_constant_p()

bool polynome_constant_p ( Ppolynome  pp)

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

Parameters
ppp

Definition at line 180 of file pnome-reduc.c.

182 {
183  /* polynome_constant_p: polynome is undefined */
185 
186  if (POLYNOME_NUL_P(pp))
187  return(true);
188  else {
189  Pvecteur pvTCST = vect_new((Variable) TCST, VALUE_ONE);
190  bool b = (vect_equal(pvTCST, monome_term(polynome_monome(pp)))
191  && (polynome_succ(pp) == POLYNOME_NUL));
192 
193  vect_rm(pvTCST);
194  return(b);
195  }
196 }
void * Variable
arithmetique is a requirement for vecteur, but I do not want to inforce it in all pips files....
Definition: vecteur-local.h:60

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_contains_var()

bool polynome_contains_var ( Ppolynome  pp,
Variable  var 
)

bool polynome_contains_var(Ppolynome pp, Variable var) PRIVATE returns true if variable var is in polynomial pp.

Parameters
ppp
varar

Definition at line 238 of file pnome-reduc.c.

241 {
242  if ( POLYNOME_UNDEFINED_P(pp) )
243  return (false);
244  else {
245  for ( ; pp != POLYNOME_NUL; pp = polynome_succ(pp))
246  if (vect_coeff(var, monome_term(polynome_monome(pp))) != 0)
247  return (true);
248  return(false);
249  }
250 }
Value vect_coeff(Variable var, Pvecteur vect)
Variable vect_coeff(Variable var, Pvecteur vect): coefficient de coordonnee var du vecteur vect —> So...
Definition: unaires.c:228

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_decr()

Ppolynome polynome_decr ( Ppolynome  pp)

Ppolynome polynome_decr(Ppolynome pp) returns pp - 1.

pp is NOT duplicated.

Parameters
ppp

Definition at line 246 of file pnome-scal.c.

248 {
249  if (POLYNOME_UNDEFINED_P(pp))
250  return (POLYNOME_UNDEFINED);
251  else {
252  Pmonome minus_one = make_monome(-1.0, TCST, VALUE_ONE);
253 
254  polynome_monome_add(&pp, minus_one);
255  monome_rm(&minus_one);
256 
257  return(pp);
258  }
259 }

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_degree()

int polynome_degree ( Ppolynome  pp,
Variable  var 
)

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

Parameters
ppp
varar

Definition at line 93 of file pnome-reduc.c.

96 {
97  int power, deg = 0;
98 
99  /* polynome_degree: polynome is undefined */
101  for( ; pp != POLYNOME_NUL; pp = polynome_succ(pp)) {
102  power = (int) vect_coeff(var, monome_term(polynome_monome(pp)));
103  if (deg < power) deg = power;
104  }
105  return(deg);
106 }
void const char const char const int

References assert, int, monome_term, polynome_monome, POLYNOME_NUL, polynome_succ, POLYNOME_UNDEFINED_P, and vect_coeff().

Referenced by polynome_roots(), and polynome_sigma().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_div()

Ppolynome polynome_div ( Ppolynome  pp1,
Ppolynome  pp2 
)

Ppolynome polynome_div(Ppolynome pp1, Ppolynome pp2) returns p = pp1 / pp2.

Parameters
pp1p1
pp2p2

Definition at line 381 of file pnome-bin.c.

383 {
385  || POLYNOME_NUL_P(pp2) )
386  return (POLYNOME_UNDEFINED);
387  if (POLYNOME_NUL_P(pp1))
388  return (POLYNOME_NUL);
389  else {
390  Ppolynome ppresult;
391 
392  if (is_single_monome(pp2)) {
393  ppresult = polynome_monome_div(pp1, polynome_monome(pp2));
394  }
395  else {
396  fprintf(stdout,"The divider has at least two elements!\n");
397  exit(3);
398  }
399  return (ppresult);
400  }
401 }
#define exit(code)
Definition: misc-local.h:54
Ppolynome polynome_monome_div(Ppolynome pp, Pmonome pm)
Ppolynome polynome_monome_div(Ppolynome pp, Pmonome pm) PRIVATE returns p = pp / pm.
Definition: pnome-bin.c:356
#define is_single_monome(pp)

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_dup()

Ppolynome polynome_dup ( Ppolynome  pp)

Ppolynome polynome_dup(Ppolynome pp) creates and returns a copy of pp.

Parameters
ppp

Definition at line 211 of file pnome-alloc.c.

213 {
214  Ppolynome ppdup, curpp;
215 
216  if (POLYNOME_NUL_P(pp))
217  return (POLYNOME_NUL);
218  else if (POLYNOME_UNDEFINED_P(pp))
219  return (POLYNOME_UNDEFINED);
220  else {
222  curpp = ppdup;
223  while ((pp = polynome_succ(pp)) != POLYNOME_NUL) {
224  polynome_succ(curpp) =
226  curpp = polynome_succ(curpp);
227  }
228  return (ppdup);
229  }
230 }
Pmonome monome_dup(Pmonome pm)
Pmonome monome_dup(Pmonome pm) PRIVATE creates and returns a copy of pm.
Definition: pnome-alloc.c:132

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_equal()

bool polynome_equal ( Ppolynome  pp1,
Ppolynome  pp2 
)

bool polynome_equal(Ppolynome pp1, Ppolynome pp2) return (pp1 == pp2) >>>TO BE CONTINUED<<<

TO BE CONTINUED

Parameters
pp1p1
pp2p2

Definition at line 257 of file pnome-reduc.c.

259 {
260  Ppolynome ppcopy1 = polynome_dup(pp1);
261  Ppolynome ppcopy2 = polynome_dup(pp2);
262 
265 
266 
267  /* TO BE CONTINUED */
268  polynome_error ("polynome_equal", "To be implemented!\n");
269  return false;
270 }
int default_is_inferior_pvarval(Pvecteur *pvarval1, Pvecteur *pvarval2)
bool default_is_inferior_pvarval(Pvecteur * pvarval1, Pvecteur * pvarval2) return true if var1 is bef...
Definition: pnome-io.c:286
Ppolynome polynome_sort(Ppolynome *ppp, int *is_inferior_var)
Ppolynome polynome_sort((Ppolynome *) ppp, bool (*is_inferior_var)()) Sorts the polynomial *ppp: mono...

References default_is_inferior_pvarval(), polynome_dup(), polynome_error(), and polynome_sort().

+ Here is the call graph for this function:

◆ polynome_error()

void polynome_error ( const char *  name,
char *  fmt,
  ... 
)

pnome-error.c

pnome-error.c

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

Parameters
nameame
fmtmt

Definition at line 62 of file pnome-error.c.

63 {
64  va_list args;
65 
66  va_start(args, fmt);
67 
68  /* print name of function causing error */
69  (void) fprintf(stderr, "\npolynome error in %s: ", name);
70 
71  /* print out remainder of message */
72  (void) vfprintf(stderr, fmt, args);
73  va_end(args);
74 
75  /* create a core file for debug */
76  (void) abort();
77 }

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_factorize()

Ppolynome polynome_factorize ( Ppolynome  pp,
Variable  var,
int  n 
)

Ppolynome polynome_factorize(Ppolynome pp, Variable var, int n) returns the (polynomial) coefficient of var^n in polynomial pp.

Parameters
ppp
varar

Definition at line 131 of file pnome-reduc.c.

135 {
136  Ppolynome ppfact = POLYNOME_NUL;
137  Pmonome pm;
138 
139  if (POLYNOME_UNDEFINED_P(pp))
140  return (POLYNOME_UNDEFINED);
141  else {
142  for( ; pp != POLYNOME_NUL; pp = polynome_succ(pp))
143  if (n == (int) vect_coeff(var, monome_term(polynome_monome(pp)))) {
144  pm = monome_del_var(polynome_monome(pp), var);
145  polynome_monome_add(&ppfact, pm);
146  }
147 
148  return(ppfact);
149  }
150 }
Pmonome monome_del_var(Pmonome pm, Variable var)
Pmonome monome_del_var(Pmonome pm, Variable var) PRIVATE returns a copy of monomial pm,...
Definition: pnome-private.c:47

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_fprint()

void polynome_fprint ( FILE *  ,
Ppolynome  ,
char *  *)(Variable,
int(*)(Pvecteur *, Pvecteur *)   
)

◆ polynome_free()

Ppolynome polynome_free ( Ppolynome  pp)

Ppolynome polynome_free(Ppolynome pp) frees space occupied by polynomial pp returns pp == POLYNOME_NUL !usage: polynome_rm(pp);.

correct?

Parameters
ppp

Definition at line 191 of file pnome-alloc.c.

193 {
194  Ppolynome pp1 = pp, pp2;
195 
196  if (!POLYNOME_UNDEFINED_P(pp)) {
197  while (pp1 != POLYNOME_NUL) {
198  pp2 = polynome_succ(pp1);
199  monome_rm(&polynome_monome(pp1));
200  free((char *) pp1); /* correct? */
201  pp1 = pp2;
202  }
203  }
204  return POLYNOME_NUL;
205 }

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_incr()

Ppolynome polynome_incr ( Ppolynome  pp)

Ppolynome polynome_incr(Ppolynome pp) returns pp + 1.

pp is NOT duplicated.

Parameters
ppp

Definition at line 226 of file pnome-scal.c.

228 {
229  if (POLYNOME_UNDEFINED_P(pp))
230  return (POLYNOME_UNDEFINED);
231  else {
232  Pmonome one = make_monome(1.0, TCST, VALUE_ONE);
233 
234  polynome_monome_add(&pp, one);
235  monome_rm(&one);
236 
237  return(pp);
238  }
239 }

References make_monome(), monome_rm(), polynome_monome_add(), POLYNOME_UNDEFINED, POLYNOME_UNDEFINED_P, TCST, and VALUE_ONE.

+ Here is the call graph for this function:

◆ polynome_max_degree()

int polynome_max_degree ( Ppolynome  pp)

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

Parameters
ppp

Definition at line 113 of file pnome-reduc.c.

114 {
115  int power, deg = 0;
117 
118  /* polynome_degree: polynome is undefined */
120  for(m = pp ; m != POLYNOME_NUL; m = polynome_succ(m)) {
121  power = (int) vect_sum(monome_term(polynome_monome(m)));
122  if (deg < power) deg = power;
123  }
124  return deg;
125 }
Value vect_sum(Pvecteur v)
Value vect_sum(Pvecteur v): somme des coefficients d'un vecteur (i.e.
Definition: reductions.c:261

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_monome_add()

void polynome_monome_add ( Ppolynome ppp,
Pmonome  pm 
)

pnome-bin.c

pnome-bin.c

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

Parameters
ppppp
pmm

Definition at line 50 of file pnome-bin.c.

53 {
54  Ppolynome prevpp = POLYNOME_NUL;
55  float coeff;
56 
57  if (POLYNOME_NUL_P(*ppp)) {
59  }
60  else if (POLYNOME_UNDEFINED_P(*ppp))
61  ;
62  else if (MONOME_UNDEFINED_P(pm)) {
63  polynome_rm(ppp);
64  *ppp = POLYNOME_UNDEFINED;
65  }
66  else if (!MONOME_NUL_P(pm)) {
67  Ppolynome curpp;
68  for(curpp = *ppp; curpp != POLYNOME_NUL; prevpp = curpp,curpp = polynome_succ(curpp)) {
69  if (monome_colin(polynome_monome(curpp), pm)) {
70  coeff = monome_coeff(polynome_monome(curpp)) + monome_coeff(pm);
71  if ((coeff < PNOME_MACH_EPS) && (coeff > -PNOME_MACH_EPS)) {
72  /* This monomial is null now. We free it */
73  if (curpp == *ppp)
74  *ppp = polynome_succ(*ppp);
75  else
76  polynome_succ(prevpp) = polynome_succ(curpp);
77  polynome_succ(curpp) = POLYNOME_NUL;
78  polynome_rm(&curpp);
79  curpp = ( prevpp==POLYNOME_NUL ? *ppp : prevpp );
80  if ( curpp == POLYNOME_NUL ) /* no element in polynome */
81  *ppp = POLYNOME_NUL;
82  }
83  else /* Save new value of monomial coefficient. */
84  monome_coeff(polynome_monome(curpp)) = coeff;
85  break;
86  }
87  }
88 
89  if ( curpp == POLYNOME_NUL && !POLYNOME_NUL_P(*ppp) ) {
90  /* Add a copy of the monomial at the end */
91  good_polynome_assert("polynome_monome_add about prevpp before",prevpp);
92  if ( polynome_succ(prevpp) == POLYNOME_NUL ) {
93  if ( MONOME_NUL_P(pm) || MONOME_UNDEFINED_P(pm) )
94  printf("monome is poor\n");
95  else
97  }
98  good_polynome_assert("polynome_monome_add about prevpp at end",prevpp);
99  }
100  }
101  good_polynome_assert("polynome_monome_add about *ppp at end",*ppp);
102 }
void good_polynome_assert(char *function,...)
void good_polynome_assert(va_alist) Check if the second argument is a valid polynomial.
Definition: pnome-error.c:84
#define PNOME_MACH_EPS
int printf()

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_monome_addition()

Ppolynome polynome_monome_addition ( Ppolynome  pp,
Pmonome  pm 
)

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

Parameters
ppp
pmm

Definition at line 112 of file pnome-bin.c.

115 {
116  Ppolynome prevpp = POLYNOME_UNDEFINED;
117 
118  if (POLYNOME_NUL_P(pp)) {
120  }
121  else if (POLYNOME_UNDEFINED_P(pp))
122  ;
123  else if (MONOME_UNDEFINED_P(pm)) {
124  pp = polynome_free(pp);
125  pp = POLYNOME_UNDEFINED;
126  }
127  else if (!MONOME_NUL_P(pm)) {
128  Ppolynome curpp;
129  for(curpp = pp; curpp != POLYNOME_NUL; prevpp = curpp,curpp = polynome_succ(curpp)) {
130  if (monome_colin(polynome_monome(curpp), pm)) {
131  float coeff = monome_coeff(polynome_monome(curpp)) + monome_coeff(pm);
132 
133  if ((coeff < PNOME_MACH_EPS) && (coeff > -PNOME_MACH_EPS)) {
134  /* This monomial is null now. We free it */
135  if (curpp == pp)
136  pp = polynome_succ(pp);
137  else
138  polynome_succ(prevpp) = polynome_succ(curpp);
139  polynome_succ(curpp) = POLYNOME_NUL;
140  polynome_rm(&curpp);
141  curpp = ( prevpp==POLYNOME_NUL ? pp : prevpp );
142  if ( curpp == POLYNOME_NUL ) /* no element in polynome */
143  pp = POLYNOME_NUL;
144  }
145  else /* Save new value of monomial coefficient. */
146  monome_coeff(polynome_monome(curpp)) = coeff;
147  break;
148  }
149  }
150 
151  if ( curpp == POLYNOME_NUL && !POLYNOME_NUL_P(pp) ) {
152  /* Add a copy of the monomial at the end */
153  good_polynome_assert("polynome_monome_add about prevpp before",prevpp);
154  if ( polynome_succ(prevpp) == POLYNOME_NUL ) {
155  if ( MONOME_NUL_P(pm) || MONOME_UNDEFINED_P(pm) )
156  printf("monome is poor\n");
157  else
159  }
160  good_polynome_assert("polynome_monome_add about prevpp at end",prevpp);
161  }
162  }
163  good_polynome_assert("polynome_monome_add about pp at end",pp);
164  return pp;
165 }

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_monome_div()

Ppolynome polynome_monome_div ( Ppolynome  pp,
Pmonome  pm 
)

Ppolynome polynome_monome_div(Ppolynome pp, Pmonome pm) PRIVATE returns p = pp / pm.

Parameters
ppp
pmm

Definition at line 356 of file pnome-bin.c.

359 {
361  return (POLYNOME_UNDEFINED);
362  else if (POLYNOME_NUL_P(pp) || MONOME_NUL_P(pm))
363  return (POLYNOME_NUL);
364  else {
365  Ppolynome ppresult = POLYNOME_NUL;
366  Ppolynome curpp, ppdup;
367  ppdup = polynome_dup(pp);
368 
369  for (curpp = ppdup ; curpp != POLYNOME_NUL; curpp = polynome_succ(curpp)) {
370  Pmonome pmtmp = monome_monome_div(polynome_monome(curpp), pm);
371  polynome_monome_add(&ppresult,pmtmp);
372  }
373  return (ppresult);
374  }
375 }
Pmonome monome_monome_div(Pmonome pm1, Pmonome pm2)
Pmonome monome_monome_div(Pmonome pm1, Pmonome pm2) PRIVATE (pm1) = (pm1) / pm2.
Definition: pnome-bin.c:314

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_monome_mult()

Ppolynome polynome_monome_mult ( Ppolynome  pp,
Pmonome  pm 
)

Ppolynome polynome_monome_mult(Ppolynome pp, Pmonome pm) PRIVATE returns pp * pm.

Parameters
ppp
pmm

Definition at line 266 of file pnome-bin.c.

269 {
270  Ppolynome curpp, ppdup;
272  return (POLYNOME_UNDEFINED);
273  else if (POLYNOME_NUL_P(pp) || MONOME_NUL_P(pm))
274  return (POLYNOME_NUL);
275  else {
276  ppdup = polynome_dup(pp);
277  for (curpp = ppdup ; curpp != POLYNOME_NUL; curpp = polynome_succ(curpp))
278  monome_monome_mult(&(polynome_monome(curpp)), pm);
279  return (ppdup);
280  }
281 }
static void monome_monome_mult(Pmonome *ppm, Pmonome pm2)
void monome_monome_mult(Pmonome *pm, Pmonome pm2) PRIVATE (*pm) = (*pm) * pm2.
Definition: pnome-bin.c:225

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_mult()

Ppolynome polynome_mult ( Ppolynome  pp1,
Ppolynome  pp2 
)

Ppolynome polynome_mult(Ppolynome pp1, Ppolynome pp2) returns pp1 * pp2.

Parameters
pp1p1
pp2p2

Definition at line 287 of file pnome-bin.c.

289 {
291 
293  return (POLYNOME_UNDEFINED);
294  if (POLYNOME_NUL_P(pp1) || POLYNOME_NUL_P(pp2))
295  return (POLYNOME_NUL);
296  else {
297  Ppolynome pppartiel, ppresult = POLYNOME_NUL;
298 
299  for (mp2 = pp2 ; mp2 != POLYNOME_NUL; mp2 = polynome_succ(mp2)) {
300  pppartiel = polynome_monome_mult(pp1, polynome_monome(mp2));
301  polynome_add(&ppresult, pppartiel);
302  polynome_rm(&pppartiel);
303  }
304  return (ppresult);
305  }
306 }
Ppolynome polynome_monome_mult(Ppolynome pp, Pmonome pm)
Ppolynome polynome_monome_mult(Ppolynome pp, Pmonome pm) PRIVATE returns pp * pm.
Definition: pnome-bin.c:266
void polynome_add(Ppolynome *ppp, Ppolynome pp2)
void polynome_add(Ppolynome* ppp, Ppolynome pp2) (*ppp) = (*ppp) + pp2.
Definition: pnome-bin.c:171

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_negate()

void polynome_negate ( Ppolynome ppp)

pnome-unaires.c

pnome-unaires.c

!usage: polynome_negate(&pp);

Parameters
ppppp

Definition at line 45 of file pnome-unaires.c.

47 {
48  Ppolynome curpp;
49 
50  if ( !POLYNOME_UNDEFINED_P(*ppp) && !POLYNOME_NUL_P(*ppp) )
51  for(curpp = *ppp; curpp != POLYNOME_NUL; curpp = polynome_succ(curpp))
53 }

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().

+ Here is the caller graph for this function:

◆ polynome_nth_root()

Ppolynome polynome_nth_root ( Ppolynome  p,
int  n 
)

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.

177  {
178  Ppolynome pp = polynome_dup(p);
179  for(p=pp;!POLYNOME_NUL_P(p);p=polynome_succ(p)) {
180  Pmonome m = polynome_monome(p);
181  Pvecteur v ;
182  monome_coeff(m)=powf(monome_coeff(m),1.f/n);
183  for(v = monome_term(m); !VECTEUR_NUL_P(v); v=vecteur_succ(v)) {
184  if(vecteur_val(v)%n == 0) {
185  vecteur_val(v)/=n;
186  }
187  else if(vecteur_var(v)!=(Variable)TCST){
188  polynome_rm(&pp);
189  return POLYNOME_UNDEFINED;
190  }
191  }
192  }
193  return pp;
194 }
#define vecteur_val(v)
#define vecteur_succ(v)

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_opposed()

Ppolynome polynome_opposed ( Ppolynome  pp)

Ppolynome polynome_opposed(Ppolynome pp); changes sign of polynomial pp.

!usage: pp = polynome_negate(pp);

Parameters
ppp

Definition at line 59 of file pnome-unaires.c.

61 {
62  Ppolynome curpp;
63 
64  if ( !POLYNOME_UNDEFINED_P(pp) && !POLYNOME_NUL_P(pp) )
65  for(curpp = pp; curpp != POLYNOME_NUL; curpp = polynome_succ(curpp))
67 
68  return pp;
69 }

References monome_coeff, polynome_monome, POLYNOME_NUL, POLYNOME_NUL_P, polynome_succ, and POLYNOME_UNDEFINED_P.

Referenced by complexity_sub().

+ Here is the caller graph for this function:

◆ polynome_power_n()

Ppolynome polynome_power_n ( Ppolynome  pp,
int  n 
)

Ppolynome polynome_power_n(Ppolynome pp, int n) returns pp ^ n (n>=0)

Modification:

  • treat n < 0 if pp is a monomial. LZ 6 Nov. 92

FI: a unique return would be welcome! No enough time for cleaning

Parameters
ppp

Definition at line 121 of file pnome-scal.c.

124 {
125  if (POLYNOME_UNDEFINED_P(pp))
126  return (POLYNOME_UNDEFINED);
127  else if (POLYNOME_NUL_P(pp)) {
128  if(n>0)
129  return POLYNOME_NUL;
130  else if (n == 0)
131  return make_polynome(1.0, TCST, VALUE_ONE);
132  else
133  return POLYNOME_UNDEFINED;
134  }
135  else if (n < 0) {
136  if ( is_polynome_a_monome(pp) ) {
137  int i,m=-n;
138  Ppolynome pptemp, ppresult = polynome_dup(pp);
139 
140  for(i = 1; i < m; i++) {
141  pptemp = polynome_mult(ppresult, pp);
142  polynome_rm(&ppresult);
143  ppresult = pptemp;
144  }
145  return(polynome_div(make_polynome(1.0, TCST, VALUE_ONE),
146  ppresult));
147  }
148  else
149  polynome_error("polynome_power_n",
150  "negative power n=%d"
151  " and polynome is not a monome\n",n);
152  }
153  else if (n == 0)
154  return(make_polynome(1.0, TCST, VALUE_ONE));
155  else if (n == 1)
156  return(polynome_dup(pp));
157  else if (n > 1) {
158  int i;
159  Ppolynome pptemp, ppresult = polynome_dup(pp);
160 
161  for(i = 1; i < n; i++) {
162  pptemp = polynome_mult(ppresult, pp);
163  polynome_rm(&ppresult);
164  ppresult = pptemp;
165  }
166  return(ppresult);
167  }
168  /* FI: a unique return would be welcome! No enough time for cleaning */
169  polynome_error("polynome_power_n", "Cannot happen!\n");
170  return POLYNOME_UNDEFINED;
171 }
Ppolynome make_polynome(float coeff, Variable var, Value expo)
Ppolynome make_polynome(float coeff, Variable var, Value expo) PRIVATE allocates space for,...
Definition: pnome-alloc.c:100
Ppolynome polynome_div(Ppolynome pp1, Ppolynome pp2)
Ppolynome polynome_div(Ppolynome pp1, Ppolynome pp2) returns p = pp1 / pp2.
Definition: pnome-bin.c:381
Ppolynome polynome_mult(Ppolynome pp1, Ppolynome pp2)
Ppolynome polynome_mult(Ppolynome pp1, Ppolynome pp2) returns pp1 * pp2.
Definition: pnome-bin.c:287
bool is_polynome_a_monome(Ppolynome pp)
bool is_polynome_a_monome(Ppolynome pp) Return true if the pp is just a monome.
Definition: pnome-error.c:162

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_rm()

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?

Parameters
ppppp

Definition at line 170 of file pnome-alloc.c.

172 {
173  Ppolynome pp1 = *ppp, pp2;
174 
175  if (!POLYNOME_UNDEFINED_P(*ppp)) {
176  while (pp1 != POLYNOME_NUL) {
177  pp2 = polynome_succ(pp1);
178  monome_rm(&polynome_monome(pp1));
179  free((char *) pp1); /* correct? */
180  pp1 = pp2;
181  }
182  *ppp = POLYNOME_NUL;
183  }
184 }

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_roots()

Pvecteur polynome_roots ( Ppolynome  p,
Variable  var 
)

pnome-root.c

pnome-root.c

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

Parameters
varar

Definition at line 48 of file pnome-root.c.

48  {
49  switch(polynome_degree(p,var)) {
50  /* should we verify the other components are equal to zero ? */
51  case 0:
52  return VECTEUR_UNDEFINED;
53  /* gather a x var + b information */
54  case 1: {
56  for(pp=p ; pp != POLYNOME_NUL; pp = polynome_succ(pp)) {
57  Pmonome m = polynome_monome(pp);
58  Value val ;
59  if((val=vect_coeff(var, monome_term(m)))!=VALUE_ZERO) {
60  Pmonome dup = monome_dup(m);
61  if(vect_size(monome_term(dup))>1)
62  vect_del_var(monome_term(dup),var);
63  else
64  vect_chg_var(&monome_term(dup),var,TCST);
65  polynome_monome_add(&a,dup);
66  monome_rm(&dup);
67  }
68  else {
69  polynome_monome_add(&b,m);
70  }
71  }
72  /* the root is -b/a */
73  polynome_negate(&b);
74  b=polynome_div(b,a);
75  polynome_rm(&a);
76  return vect_new(b,1);
77  }
78  /* gather a x^2 + b x + c informations */
79  case 2:{
81  for(pp=p ; pp != POLYNOME_NUL; pp = polynome_succ(pp)) {
82  Pmonome m = polynome_monome(pp);
83  Value val =vect_coeff(var, monome_term(m));
84  if(val==2) {
85  Pmonome dup = monome_dup(m);
86  vect_chg_var(&monome_term(dup),var,TCST);
87  polynome_monome_add(&a,dup);
88  monome_rm(&dup);
89  }
90  else if(val == 1 ) {
91  Pmonome dup = monome_dup(m);
92  vect_chg_var(&monome_term(dup),var,TCST);
93  polynome_monome_add(&b,dup);
94  monome_rm(&dup);
95  }
96  else {
97  polynome_monome_add(&c,m);
98  }
99  }
100  /* compute determinant */
101  Ppolynome delta=polynome_mult(a,c),tmp;
102  delta=polynome_scalar_multiply(delta,4);
103  polynome_negate(&delta);/* delta =-4 a c*/
104  tmp=polynome_mult(b,b);
105  polynome_add(&delta,tmp);
106  polynome_rm(&tmp);
107 
108  /* take its square root if possible */
109  Ppolynome sqdelta = polynome_nth_root(delta,2);
110  if(POLYNOME_UNDEFINED_P(sqdelta))
111  polynome_error(__FUNCTION__,"cannot solve this degree 2 polynomial symbolically\n");
112 
113  /* the roots are (-b +sqdelta) / 2a and (-b -sqdelta) / 2a */
114  Ppolynome r0,r1=polynome_dup(b);
115  r0=polynome_addition(b,sqdelta);
116  polynome_negate(&r0);
117  polynome_scalar_mult(&a,2);// warning: modifies a in place */
118  r0=polynome_div(tmp=r0,a);
119  polynome_rm(&tmp);
120 
121  polynome_negate(&b); //warning modifies b in place
122  r1=polynome_addition(b,sqdelta);
123  r1=polynome_div(tmp=r1,a);
124  polynome_rm(&tmp);
125  Pvecteur roots=vect_new(r0,1);
126  vect_add_elem(&roots,r1,1);
127  return roots;
128  }
129  default:
130  polynome_error(__FUNCTION__,"solving polynome not implemented yet in that case\n");
131  }
132  return VECTEUR_NUL;
133 
134 
135 }
#define VALUE_ZERO
int Value
int vect_size(Pvecteur v)
package vecteur - reductions
Definition: reductions.c:47
Ppolynome polynome_addition(Ppolynome pp, Ppolynome pp2)
Ppolynome polynome_addition(Ppolynome pp, Ppolynome pp2) pp = pp + pp2.
Definition: pnome-bin.c:195
int polynome_degree(Ppolynome pp, Variable var)
int polynome_degree(Ppolynome pp, Variable var) returns the degree of polynomial pp viewed as a polyn...
Definition: pnome-reduc.c:93
Ppolynome polynome_nth_root(Ppolynome p, int n)
computes the n-root of polynomial if possible, that is if all exponents are multiple of n return POLY...
Definition: pnome-scal.c:177
void polynome_scalar_mult(Ppolynome *ppp, float factor)
void polynome_scalar_mult(Ppolynome* ppp, float factor) (*ppp) = factor * (*ppp) !...
Definition: pnome-scal.c:46
Ppolynome polynome_scalar_multiply(Ppolynome pp, float factor)
Ppolynome polynome_scalar_multiply(Ppolynome pp, float factor) pp = factor * (pp) !...
Definition: pnome-scal.c:65
void polynome_negate(Ppolynome *ppp)
void polynome_negate(Ppolynome *ppp); changes sign of polynomial *ppp.
Definition: pnome-unaires.c:45
#define VECTEUR_UNDEFINED
void vect_add_elem(Pvecteur *pvect, Variable var, Value val)
void vect_add_elem(Pvecteur * pvect, Variable var, Value val): addition d'un vecteur colineaire au ve...
Definition: unaires.c:72

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_scalar_add()

void polynome_scalar_add ( Ppolynome ,
double   
)

◆ polynome_scalar_addition()

Ppolynome polynome_scalar_addition ( Ppolynome  ,
double   
)

◆ polynome_scalar_mult()

void polynome_scalar_mult ( Ppolynome ,
double   
)

◆ polynome_scalar_multiply()

Ppolynome polynome_scalar_multiply ( Ppolynome  ,
double   
)

◆ polynome_sigma()

Ppolynome polynome_sigma ( Ppolynome  pp,
Variable  var,
Ppolynome  ppinf,
Ppolynome  ppsup 
)

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:

  • (sum(ppsup, -1) x ^ i)

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)

Parameters
ppp
varar
ppinfpinf
ppsuppsup

Definition at line 160 of file pnome-unaires.c.

164 {
165  Ppolynome ppacc, pptemp, ppfact, ppresult = POLYNOME_NUL;
166  int i;
167 
169  || POLYNOME_UNDEFINED_P(ppsup))
170  return (POLYNOME_UNDEFINED);
171 
172  for(i = 0; i <= polynome_degree(pp, var); i++) {
173  /* compute:
174  * sum(ppinf,ppsup) ppfact * x ^ i
175  * as:
176  * ppfact * ( sum(1, ppsup) x ^ i -
177  * sum(1, ppinf) x ^ i +
178  * ppfin ^ i )
179  * where:
180  * ppfact is the term associated to x ^ i in pp
181  *
182  * Note that this decomposition is correct wrt standard
183  * mathematical notations if and only if:
184  * ppsup >= ppinf >= 1
185  * although the correct answer can be obtained when
186  * ppsup >= ppinf
187  *
188  * Thus:
189  * sum(1, ppsup) x ^ i
190  * is extended for ppsup < 1 and defined as:
191  * - (sum(ppsup, -1) x ^ i)
192  */
193  ppfact = polynome_factorize(pp, var, i);
194 
195  if (!POLYNOME_NUL_P(ppfact)) {
196  ppacc = polynome_sum_of_power(ppsup, i);
197  /* LZ: if ppinf == 1: no need to compute next sigma (pptemp),
198  * nor ppinf^i (FI: apparently not implemented) */
199  pptemp = polynome_sum_of_power(ppinf, i);
200 
201  polynome_negate(&pptemp);
202  polynome_add(&ppacc, pptemp);
203  /* ppacc = sigma{1,ppsup} - sigma{1,ppinf} */
204  polynome_rm(&pptemp);
205 
206  /* ppacc == (sigma{k=1,ppsup} k^i) - (sigma{k=1,ppinf} k^i) */
207 
208  pptemp = polynome_power_n(ppinf, i);
209  polynome_add(&ppacc, pptemp);
210  polynome_rm(&pptemp);
211 
212  pptemp = polynome_mult(ppfact, ppacc);
213 
214  polynome_add(&ppresult, pptemp);
215 
216  polynome_rm(&pptemp);
217  polynome_rm(&ppacc);
218  }
219  }
220  return(ppresult);
221 }
Ppolynome polynome_factorize(Ppolynome pp, Variable var, int n)
Ppolynome polynome_factorize(Ppolynome pp, Variable var, int n) returns the (polynomial) coefficient ...
Definition: pnome-reduc.c:131
Ppolynome polynome_power_n(Ppolynome pp, int n)
Ppolynome polynome_power_n(Ppolynome pp, int n) returns pp ^ n (n>=0)
Definition: pnome-scal.c:121
Ppolynome polynome_sum_of_power(Ppolynome ppsup, int p)
Ppolynome polynome_sum_of_power(Ppolynome ppsup, int p) calculates the sum of i^p for i=1 to (ppsup),...
Definition: pnome-unaires.c:79

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_sort()

Ppolynome polynome_sort ( Ppolynome ,
int(*)(Pvecteur *, Pvecteur *)   
)

◆ polynome_sprint()

char* polynome_sprint ( Ppolynome  ,
char *  *)(Variable,
int(*)(Pvecteur *, Pvecteur *)   
)

◆ polynome_sscanf()

Ppolynome polynome_sscanf ( char *  sp,
Variable(*)(Variable name_to_variable 
)

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);

Parameters
spp

Definition at line 359 of file pnome-io.c.

362 {
363  Ppolynome pp = POLYNOME_NUL;
364  Pmonome curpm;
365  bool constructing_monome = false;
366  float coeff = 0.;
367  char *varname;
368  Value power;
369  char *s;
370 
371  s = (char*) strdup(sp);
372  remove_blanks(&s);
373 
374  while (*s != '\0')
375  {
376  /*fprintf(stderr, "\ns='%s'\n", s);*/
377  power = VALUE_ONE;
378  if (!constructing_monome) { coeff = parse_coeff(&s);
379  }
380  varname = parse_var_name(&s);
381  if (strlen(varname)!=0) {
382  if (*s == '^') {
383  s++;
384  power = float_to_value(parse_coeff(&s));
385  }
386  else
387  while ((*s == '.') || (*s == '*')) s++;
388  }
389  else varname = (char*) strdup("TCST");
390 
391  if (constructing_monome) {
392  vect_add_elem(&(monome_term(curpm)),
393  name_to_variable(varname),
394  power);
395  }
396  else {
397  curpm = make_monome(coeff, name_to_variable(varname), power);
398  constructing_monome = true;
399  }
400  /*fprintf(stderr, "au milieu: s='%s'\n", s);*/
401 
402  if ((*s == '+') || (*s == '-'))
403  {
404  polynome_monome_add(&pp, curpm);
405  monome_rm(&curpm);
406  constructing_monome = false;
407  }
408  }
409  if (!MONOME_NUL_P(curpm)) {
410  polynome_monome_add(&pp, curpm);
411  monome_rm(&curpm);
412  }
413 
414  return (pp);
415 }
#define float_to_value(f)
Variable name_to_variable(char *)
Definition: polynome_ri.c:172
static void remove_blanks(char **ps)
Definition: pnome-io.c:292
static float parse_coeff(char **ps)
Definition: pnome-io.c:307
static char * parse_var_name(char **ps)
Definition: pnome-io.c:337
char * strdup()

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().

+ Here is the call graph for this function:

◆ polynome_sum_of_power()

Ppolynome polynome_sum_of_power ( Ppolynome  ppsup,
int  p 
)

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))

Parameters
ppsuppsup

Definition at line 79 of file pnome-unaires.c.

82 {
83  Ppolynome ppresult = NULL, ppacc;
84  int i;
85 
86  if (POLYNOME_UNDEFINED_P(ppsup))
87  return (POLYNOME_UNDEFINED);
88  if (p < 0)
89  polynome_error("polynome_sum_of_power", "negative power: %d\n", p);
90  else if (p == 0)
91  ppresult = polynome_dup(ppsup);
92  else {
93  if ( polynome_constant_p(ppsup) ) { /* if the upper bound is constant ... */
94  double factor, result = 0;
95  double cste = (double)polynome_TCST(ppsup);
96 
97  if (cste<1) {
98  /* FI: That means, no iteration is executed whatsoever,
99  isn't it?
100 
101  Also, polynome_error() does stop the execution and we
102  are in trouble for Linear/C3 Library. We should init some exit
103  function towards pips_internal_error().
104  */
105  /*
106  polynome_error("polynome_sum_of_power",
107  "compute a sum from 1 to %f!\n", (float) cste);
108  */
109  ppresult = POLYNOME_NUL;
110  }
111  /*else if (cste==1)
112  ppresult = POLYNOME_NUL;*/
113  else {
114  result = intpower(cste, p) * ((double) (cste / (p+1)) + 0.5);
115  factor = ((double) p/2);
116 
117  for (i=1; 0<p-2*i+1; i++) {
118  result += (intpower(cste, p-2*i+1)
119  * ((double) (Bernouilli(i) * factor)));
120  factor *= - ((double) (p-2*i+1)*(p-2*i)) / ((double) (2*i+1)*(2*i+2));
121  }
122  ppresult = make_polynome((float) result, TCST, VALUE_ONE);
123  }
124  }
125  else { /* if the upper bound is a non-constant polynomial ... */
126  float factor;
127  /* (ppsup^(p+1)) / (p+1) */
128  ppresult = polynome_power_n(ppsup, p+1);
129  polynome_scalar_mult(&ppresult, (float) 1/(p+1));
130  /* 1/2 * ppsup^p */
131  ppacc = polynome_power_n(ppsup, p);
132  polynome_scalar_mult(&ppacc, (float) 1/2);
133  polynome_add(&ppresult, ppacc);
134  polynome_rm(&ppacc);
135 
136  factor = ((float) p / 2);
137  /* computes factors p(p-1).../(2i!) incrementally */
138 
139  for (i=1; 0 < p-2*i+1; i++) {
140  /* the current term of the remaining of the sum is: */
141  /* Ti = (1/(2i)!)*(Bi*p*(p-1)* . *(p-2*i+2)*ppsup^(p-2*i+1)) */
142 
143  ppacc = polynome_power_n(ppsup, p-2*i+1);
144  polynome_scalar_mult(&ppacc, (float) Bernouilli(i) * factor);
145 
146  polynome_add(&ppresult, ppacc);
147  polynome_rm(&ppacc);
148 
149  factor *= -((float)(p-2*i+1)*(p-2*i))/((float)(2*i+1)*(2*i+2));
150  }
151  }
152  }
153  return(ppresult);
154 }
float Bernouilli(int i)
float Bernouilli(int i) PRIVATE returns Bi = i-th Bernouilli number
float polynome_TCST(Ppolynome pp)
float polynome_TCST(Ppolynome pp) returns the constant term of polynomial pp.
Definition: pnome-reduc.c:156
bool polynome_constant_p(Ppolynome pp)
bool polynome_constant_p(Ppolynome pp) return true if pp is a constant polynomial (including null pol...
Definition: pnome-reduc.c:180

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_TCST()

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

Parameters
ppp

Definition at line 156 of file pnome-reduc.c.

158 {
159  Pmonome pm;
160  Pvecteur pvTCST = vect_new((Variable) TCST, VALUE_ONE);
161 
162  /* polynome_TCST: polynome is undefined */
164  for( ; pp != POLYNOME_NUL; pp = polynome_succ(pp) ) {
165  pm = polynome_monome(pp);
166  if (vect_equal(pvTCST, monome_term(pm)))
167  return(monome_coeff(pm));
168  }
169 
170  vect_rm(pvTCST);
171  return ((float) 0);
172 
173 }

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ polynome_used_var()

Pbase polynome_used_var ( Ppolynome  ,
int(*)(Pvecteur *, Pvecteur *)   
)

◆ polynome_var_subst()

Ppolynome polynome_var_subst ( Ppolynome  pp,
Variable  var,
Ppolynome  ppsubst 
)

pnome-reduc.c

pnome-reduc.c

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.

Parameters
ppp
varar
ppsubstpsubst

Definition at line 47 of file pnome-reduc.c.

51 {
52  Ppolynome ppsubst_n, ppmult;
53  Ppolynome newpp = POLYNOME_NUL;
54  Pmonome curpm, newpm;
55  int varpower;
56 
57  if (POLYNOME_UNDEFINED_P(pp))
58  return (POLYNOME_UNDEFINED);
59  else {
60  for( ; pp != POLYNOME_NUL; pp = polynome_succ(pp)) {
61  curpm = polynome_monome(pp);
62  if ((varpower = (int) vect_coeff(var, monome_term(curpm))) == 0)
63  polynome_monome_add(&newpp, curpm);
64  else {
65  /* the monomial curpm contains the variable var. */
66  /* We duplicate it, remove variable var from it, */
67  /* we multiply it with ppsubst^n (where n was the */
68  /* power of var), and we add the result to newpp. */
69 
70  if (POLYNOME_UNDEFINED_P(ppsubst))
71  return (POLYNOME_UNDEFINED);
72  else {
73  newpm = monome_del_var(curpm, var);
74  ppsubst_n = polynome_power_n(ppsubst, varpower);
75  ppmult = polynome_monome_mult(ppsubst_n, newpm);
76  polynome_add(&newpp, ppmult);
77 
78  polynome_rm(&ppmult);
79  polynome_rm(&ppsubst_n);
80  monome_rm(&newpm);
81  }
82  }
83  }
84  return(newpp);
85  }
86 }

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ vecteur_to_polynome()

Ppolynome vecteur_to_polynome ( Pvecteur  pv)

===========================================================================

Ppolynome vecteur_to_polynome(Pvecteur pv): translates a Pvecteur into a Ppolynome.

Parameters
pvv

Definition at line 406 of file pnome-bin.c.

407 {
408  Ppolynome pp;
409 
410  if(VECTEUR_NUL_P(pv))
411  pp = POLYNOME_NUL;
412  else {
413  Pvecteur vec;
414 
415  pp = NULL;
416  for(vec = pv; vec != NULL; vec = vec->succ) {
417  Variable var = vecteur_var(vec);
418  float val = VALUE_TO_FLOAT(vecteur_val(vec));
419  Ppolynome newpp;
420 
421  newpp = make_polynome(val, var, VALUE_ONE);
422  polynome_succ(newpp) = pp;
423  pp = newpp;
424  }
425  }
426 
427  return(pp);
428 }
#define VALUE_TO_FLOAT(val)
struct Svecteur * succ
Definition: vecteur-local.h:92

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: