]> AND Private Git Repository - lniv_gpu.git/blob - lib_math.c
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
initial commit for lniv
[lniv_gpu.git] / lib_math.c
1 /**
2  * \file lib_math.c
3  * \brief routines 
4  * \author NB - PhyTI 
5  * \version x.x
6  * \date 20 decembre 2009
7  *
8  */
9
10 #include <stdio.h>
11 #include "defines.h"
12 #include "lib_math.h"
13
14 /**
15  * \fn void tic(struct timeval* temps, char* texte)
16  * \brief Initialise le compteur de temps
17  *
18  * \param[out]  temps  
19  * \param[in]   texte texte a afficher
20  *
21  */
22 void tic(struct timeval* temps, char* texte)
23 {
24   gettimeofday(temps, NULL);
25
26   if (texte != NULL)
27     printf("%s\n", texte) ;
28 }
29
30 /**
31  * \fn double toc(struct timeval start, char* texte)
32  * \brief Calcule le temps ecoule
33  *
34  * \param[in]  start temps de debut du chrono  
35  * \param[in]  texte texte a afficher
36  *
37  * \return le temps ecoule entre tic et toc
38  */
39 double toc(struct timeval start, char* texte)
40 {
41   struct timeval end ;
42   double elapsed ;
43
44   gettimeofday(&end, NULL);
45
46   elapsed = (double)(end.tv_sec-start.tv_sec) 
47     + 0.000001*(double)(end.tv_usec-start.tv_usec);
48   if (texte != NULL)
49     printf("%s : %f\n", texte, elapsed) ;
50
51   return elapsed ;
52 }
53
54
55 /**
56  * \fn void min_max_int1d(int *val_min, int *val_max, int *vect, int dim)
57  * \brief determine le min et max d'un vecteur de int
58  *
59  * \param[out]  val_min 
60  * \param[out]  val_max 
61  * \param[in]   vect
62  * \param[in]   dim dimension du vecteur
63  *
64  */
65
66 void min_max_int1d(int *val_min, int *val_max, int *vect, int dim)
67 {
68   int n, min, max ;
69
70   min = vect[1];
71   max = min;
72   
73   for (n=0;n<dim;n++)
74     {
75       if (vect[n] > max) max = vect[n];
76       if (vect[n] < min) min = vect[n];
77     }
78
79   *val_min = min ;
80   *val_max = max ;
81 }
82
83 void min_max_ushort1d(int *val_min, int *val_max, unsigned short *vect, int dim)
84 {
85   int n ;
86   unsigned short min, max ;
87
88   min = vect[1];
89   max = min;
90   
91   for (n=0;n<dim;n++)
92     {
93       if (vect[n] > max) max = vect[n];
94       if (vect[n] < min) min = vect[n];
95     }
96
97   *val_min = min ;
98   *val_max = max ;
99 }
100
101
102
103
104 /**
105  * \fn inline int test_inf(double arg1, double arg2)
106  *
107  * \brief test (arg1 < arg2) inferieur a avec pourcentage minimum
108  *
109  * \param[in]   arg1
110  * \param[in]   arg2
111  *
112  * return test
113  */
114 inline int test_inf(double arg1, double arg2)
115 {
116   if (arg2 > 0)
117     return arg1 < (arg2*COEF_DECROI) ;
118   else
119     return arg1 < (arg2*INV_COEF_DECROI) ;
120 }
121
122
123
124
125
126 /**
127  * \fn inline int sign_diff_ou_egal_zero(int val1, int val2)
128  *
129  * \brief fonction qui test si les arguments sont de signes differents ou nuls
130  * \author NB - PhyTI
131  *
132  * \param[in] val1 
133  * \param[in] val2
134  *
135  * \return le test 0/1 
136  *
137  */
138 inline int sign_diff_ou_egal_zero(int val1, int val2)
139 {
140   if (val1 > 0) 
141     {
142       if (val2 > 0) return 0 ;
143       else return 1 ;
144     }
145   else 
146     if (val1 < 0)
147       {
148                 if (val2 < 0) return 0 ;
149                 else  return 1 ;
150       }
151     else
152       return 1 ;/* val1 == 0 */
153 }
154
155 /**
156  * \fn inline int sign_diff_strict(int val1, int val2)
157  *
158  * \brief fonction qui test si les arguments sont de signes differents strictement
159  * \author NB - PhyTI
160  *
161  * \param[in] val1 
162  * \param[in] val2
163  *
164  * \return le test 0/1 
165  *
166  */
167 inline int sign_diff_strict(int val1, int val2)
168 {
169   if (val1 > 0) 
170     {
171       if (val2 >= 0) return 0 ;
172       else return 1 ;
173     }
174   else 
175     if (val1 < 0)
176       {
177         if (val2 <= 0) return 0 ;
178         else  return 1 ;
179       }
180     else
181       return 0 ;/* val1 == 0 */
182 }
183
184
185
186 /**
187  * \fn inline int sinus_triangle(int Ai, int Aj, int Bi, int Bj, int Ci, int Cj)
188  *
189  * \brief calcul le "sinus" de l'angle du triangle ABC 
190  * \author NB - PhyTI
191  *
192  * \param[in] Ai les coordonnees
193  * \param[in] Aj
194  * \param[in] Bi
195  * \param[in] Bj
196  * \param[in] Ci
197  * \param[in] Cj
198  *
199  * \return le sinus non normalise 
200  *
201  * Cette fonction est utile pour determiner si un triangle ABC
202  * est donne dans l'ordre trigo. 
203  * Signe > 0: sens trigo,
204  * signe < 0: sens antitrigo
205  *       = 0: plat
206  */
207 inline int sinus_triangle(int Ai, int Aj, int Bi, int Bj, int Ci, int Cj)
208 {
209   return (((Bi-Ai)*(Cj-Aj)) - ((Ci-Ai)*(Bj-Aj))) ;
210 }
211
212
213 /**
214  * \fn void recopie_vecteur(int *in, int *out, int dim)
215  *
216  * \brief recopie le vecteur out vers in
217  * \author NB - PhyTI
218  *
219  * \param[in]  in  vecteur d'entree
220  * \param[out] out vecteur recopier
221  * \param[in]  dim longueur du vecteur
222  */
223 void recopie_vecteur(int *in, int *out, int dim)
224 {
225   int n ;
226   for (n=0; n<dim; n++) out[n] = in[n] ;
227 }