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:
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
} |
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.
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:
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:
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 |
La complication vient maintenant:
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
Partager