Bonjour, je désire implémenter la fonction erf(x). Je l'ai donc téléchargée du net (http://www.ks.uiuc.edu/Research/namd...C-source.html). En m'intéressant à l'algorithme, il y a une partie que je ne comprends pas. La voici :
J'ai 4 questions
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 /* assume little endian */ typedef union { double value; struct { unsigned int lsw; unsigned int msw; } parts; } ieee_double_shape_type; /* Get the more significant 32 bit int from a double. */ #define GET_HIGH_WORD(i,d) \ do { \ ieee_double_shape_type gh_u; \ gh_u.value = (d); \ (i) = gh_u.parts.msw; \ } while (0) /* Set the less significant 32 bits of a double from an int. */ #define SET_LOW_WORD(d,v) \ do { \ ieee_double_shape_type sl_u; \ sl_u.value = (d); \ sl_u.parts.lsw = (v); \ (d) = sl_u.value; \ } while (0)
1) que font ces fonctions ?
2) Mon PC est sur 64 bits. Comment les modifier ?
3) Comment faire pour que mon code soit portable (sur du 32 bits et du 64 bits) ?
4) que veulent dire les lignes suivantes
Dans le code, ces fonctions sont appellées de la manière suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 (i) = gh_u.parts.msw; (d) = sl_u.value;
Merci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #ifdef WIN32 /* Real math libraries provide erf(). */ /* assume 32 bit int */ typedef int int32_t; typedef unsigned int u_int32_t; double erf(double x) { int32_t hx,ix,i; double R,S,P,Q,s,y,z,r; GET_HIGH_WORD(hx,x); blabla }
Je travaille non pas sous windows mais sur la Suse Pro 9.3
Partager