Salut à toutes et à tous,
J'avoue que là, j'ai vraiment un os de taille. Pour faire simple: j'ai un programme en C qui lit un fichier de coordonnées cartésiennes.
J'ai pour ce programme deux structures:
Un résidu a un numéro (nb), et est constitué de plusieurs atomes (nb_atoms), qui ont chacun un nom de 4 caractères (name[5]) et une coordonnées dans l'espace (x, y, z). Et dans mon fichier de coordonnées, j'ai plein de résidus.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 struct atom { char name[5]; // residue name double x; // x coordinate double y; // y coordinate double z; // z coordinate }; struct residue { int nb; int nb_atoms; unsigned short D_nb; double *D; struct atom ids[25]; // The size is not important; it will be re-scaled }
D'autre part, dans la structure "residue", D est un tableau de valeurs et D_nb le nombre de données que j'ai pour le résidue en question.
Ensuite, je déclare la variable suivante:
Code:struct residue residues[500]
Voici le GROS problème que j'ai rencontré:
A chaque fois que j'incrémente la valeur D d'un élément de residues, j'incrémente la valeur D_nb de 1 (Ce tableau est initialisé en tout début). Jusque là, rien d'extraordinnaire, ça donne en gros:
La complication vient maintenant:Code:
1
2 residues[i].D[k] += K; // K est un double, i est l'indice du résidu et k l'indice de l'atome residues[i].D_nb++; // i est l'indice du résidu
Si K est un double, une des valeurs de mon tableau residues[i].D complètement perturbée, comme si la lecture du tableau était érronnée! Par exemple, elle passe de 0 à 13107!!
En revanche; si K est une valeur ronde (8 ou 8.0), tout se passe normalement, tel que je l'avais prévu.
Si quelqu'un a une idée, qu'il (elle) n'hésite pas surtout. Je lui en serai très reconnaissant! ;)
A bientôt,
Mickaël