PIPS
matrice-local.h File Reference

Go to the source code of this file.

Macros

#define MATRICE_UNDEFINED   ((matrice) NULL)
 
#define MATRICE_NULLE   ((matrice) NULL)
 
#define matrice_new(n, m)   ((matrice) malloc(sizeof(Value)*((n*m)+1)))
 Allocation et desallocation d'une matrice. More...
 
#define matrice_free(m)   (free((char *) (m)))
 
#define ACCESS(matrix, column, i, j)   ((matrix)[(((j)-1)*(column))+(i)])
 Macros d'acces aux elements d'une matrice. More...
 
#define DENOMINATOR(matrix)   ((matrix)[0])
 int DENOMINATEUR(matrix): acces au denominateur global d'une matrice matrix La combinaison *(&()) est necessaire pour avoir des parentheses autour de matrix[0] et pour pouvoir simultanement utiliser cette macro comme lhs. More...
 
#define matrice_triangulaire_inferieure_p(a, n, m)    matrice_triangulaire_p(a,n,m,true)
 bool matrice_triangulaire_inferieure_p(matrice a, int n, int m): test de triangularite de la matrice a More...
 
#define matrice_triangulaire_superieure_p(a, n, m)    matrice_triangulaire_p(a,n,m,false)
 bool matrice_triangulaire_superieure_p(matrice a, int n, int m): test de triangularite de la matrice a More...
 
#define ACC_ELEM(matrix, column, i, j, level)    (matrix[((j)-1+(level))*(column) + (i) + (level)])
 FI: Corinne, peux-tu expliquer la raison d'etre de cette macro? More...
 
#define VALIDATION   0
 FI: Corinne, pourrais-tu nous eclairer sur la signification de ces constantes? More...
 
#define MATRIX   0
 FI #define NULL 0. More...
 

Typedefs

typedef Valuematrice
 package matrice More...
 

Macro Definition Documentation

◆ ACC_ELEM

#define ACC_ELEM (   matrix,
  column,
  i,
  j,
  level 
)     (matrix[((j)-1+(level))*(column) + (i) + (level)])

FI: Corinne, peux-tu expliquer la raison d'etre de cette macro?

d'apres ce que je comprends de la suite, ca permet de definir des sous-matrices dont le coin superieur droit (i.e. le premier element) se trouve sur la diagonal?

Definition at line 112 of file matrice-local.h.

◆ ACCESS

#define ACCESS (   matrix,
  column,
  i,
 
)    ((matrix)[(((j)-1)*(column))+(i)])

Macros d'acces aux elements d'une matrice.

int ACCESS(int * matrix, int column, int i, int j): acces a l'element (i,j) de la matrice matrix, dont la taille des colonnes, i.e. le nombre de lignes, est column.

Definition at line 86 of file matrice-local.h.

◆ DENOMINATOR

#define DENOMINATOR (   matrix)    ((matrix)[0])

int DENOMINATEUR(matrix): acces au denominateur global d'une matrice matrix La combinaison *(&()) est necessaire pour avoir des parentheses autour de matrix[0] et pour pouvoir simultanement utiliser cette macro comme lhs.

#define DENOMINATOR(matrix) *(&((matrix)[0]))

Definition at line 93 of file matrice-local.h.

◆ matrice_free

#define matrice_free (   m)    (free((char *) (m)))

Definition at line 78 of file matrice-local.h.

◆ matrice_new

#define matrice_new (   n,
 
)    ((matrice) malloc(sizeof(Value)*((n*m)+1)))

Allocation et desallocation d'une matrice.

Definition at line 77 of file matrice-local.h.

◆ MATRICE_NULLE

#define MATRICE_NULLE   ((matrice) NULL)

Definition at line 74 of file matrice-local.h.

◆ matrice_triangulaire_inferieure_p

#define matrice_triangulaire_inferieure_p (   a,
  n,
 
)     matrice_triangulaire_p(a,n,m,true)

bool matrice_triangulaire_inferieure_p(matrice a, int n, int m): test de triangularite de la matrice a

Definition at line 98 of file matrice-local.h.

◆ matrice_triangulaire_superieure_p

#define matrice_triangulaire_superieure_p (   a,
  n,
 
)     matrice_triangulaire_p(a,n,m,false)

bool matrice_triangulaire_superieure_p(matrice a, int n, int m): test de triangularite de la matrice a

Definition at line 104 of file matrice-local.h.

◆ MATRICE_UNDEFINED

#define MATRICE_UNDEFINED   ((matrice) NULL)

Definition at line 73 of file matrice-local.h.

◆ MATRIX

#define MATRIX   0

FI #define NULL 0.

Definition at line 120 of file matrice-local.h.

◆ VALIDATION

#define VALIDATION   0

FI: Corinne, pourrais-tu nous eclairer sur la signification de ces constantes?

Definition at line 118 of file matrice-local.h.

Typedef Documentation

◆ matrice

typedef Value* matrice

package matrice

Neil Butler, Corinne Ancourt, Francois Irigoin, Yi-qing Yang Les matrices sont des matrices pleines, a coefficients rationnels.

Les matrices sont representes par des tableaux d'entiers mono-dimensionnels dont l'element 0 represente le denominateur global. Elles sont stockees par colonne ("column-major"), comme en Fortran. Les indices commencent a 1, toujours comme en Fortran et non comme en C. Les deux dimensions sont implicites et doivent etre passees en parametre avec la matrice dans les appels de procedures.

Le denominateur doit etre strictement positif, i.e. plus grand ou egal a un. Un denominateur nul n'aurait pas de sens. Un denominateur negatif doublerait le nombre de representations possibles d'une matrice.

Les matrices renvoyees par certaines routines, comme matrice_multiply(), ne sont pas normalisees par le pgcd des coefficients et du denominateur pour des raisons d'efficacite. Mais les routines de test, comme matrice_identite_p(), supposent leurs arguments normalises.

Il faudrait sans doute introduire deux niveaux de procedure, un niveau externe sur garantissant la normalisation, et un niveau interne efficace sans normalisation automatique.

La bibliotheque utilise une notion de sous-matrice, definie systematiquement par un parametre appele "level". Seuls les elements dont les indices de lignes et de colonnes sont superieurs a level+1 (ou level? FI->CA) sont pris en consideration. Il s'agit donc de sous-matrice dont le premier element se trouve sur la diagonale de la matrice complete et dont le dernier element et le dernier element de la matrice complete.

Note: en cas detection d'incoherence, Neil Butler renvoyait un code d'erreur particulier; Francois Irigoin a supprime ces codes de retour et a traite les exceptions par des appels a assert(), et indirectement a abort()

Definition at line 71 of file matrice-local.h.