Bonjour
Je suis confronté à un problème très bizarre je dois dire.
J'ai un fichier de nombres complexes sous la forme de matrices :
Je lit via une méthode le fichier de la manière suivante :1+4i 3-5i 7+2i
3+4i 4-66i 45-78i
4+8i 56+2i 4-i
Comme vous pouvez le voir, j'affiche 'val' pour être sûr que chaque complexe est bien pris. Et c'est le cas, j'ai la liste de tous mes complexes qui s'affiche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 while ( getline( file2, val, ' ' ) ) { cout << val << endl ; this->values[i][j] = Complex::getComplexFromString(val) ; j++ ; // new row if(j == m) { i++ ; j=0 ; } }
Mais le truc bizarre, c'est ce que j'obtiens à la sortie de la méthode getComplexFromString(). Cette méthode a pour but de créer un objet Complex en parsant la chaine 'val' et en récupérant, sous la forme de variables double, la partie réelle et la partie imaginaire.
Voici la partie importante de celle-ci :
Je ne sais pas si c'est la meilleure façon de faire mais en clair, si y'a le signe + alors on sépare la chaine en deux selon le +, pareil pour le - .
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 // si il y a le signe + if(sNum.find("+") != string::npos) { istringstream iss( sNum ); getline( iss, s, '+' ) ; re = stringToDouble(s); getline( iss, s, '+' ) ; im = stringToDouble(s); } // il y a le signe - else { istringstream iss( sNum ); getline( iss, s, '-' ) ; re = stringToDouble(s); getline( iss, s, '-' ) ; im = -1*stringToDouble(s); } } Complex ret(re,im); return ret ;
Mais en sortie, j'obtiens la liste de complexes suivantes :
Incompréhensible... Les trois premiers sont bons, le quatrième manque, le cinquième est bon, le sizième est partiellement bon, le septième manque, le huitième est bon et le neuvième est pas bon. Et le dernier, je ne sais pas d'où ça vient. En fait, pour le neuvième, c'est normal que la partie imaginaire soit fausse vue que je n'ai pas encore codé le fait que "i" tout seul vaut 1.1+4i
3-5i
7+2i
4-66i
45+8i
56+2i
4-6.5271e+262i
2.64014e-308-6.5271e+262i
Mais pourquoi ce résultat pour les autres? Certains sont bons, d'autres non et d'autres manquent carrément !
Sauriez-vous d'où ça vient ? Me conseillez-vous une autre méthode? (sachant que je n'ai pas le droit d'utiliser de biblio externe).
Merci
Nas'
Partager