format d'affichage

Le
AG
Bonjour,

je porte un programme sous linux, et pour vérifier, j'affiche des
valeurs, résultat d'une execution sous Windows, et Linux.

Sauf que pour afficher un double en mode scientifique, Sous linux j'ai
deux chiffres pour l'exposant, alors que sous Windows, j'en ai trois :

version Windows : -3.63376e+000
version Linux : -3.63376e+00

C'est pas pratique parce que mon comparateurs de fichier ne sait pas
que c'est en fait la même chose. D'ou ma question : est-il possible de
controler le nombre de chiffre utilisé pour l'affichage de l'exposant
?

template<class T>

ostream & operator<<(ostream & out, vector<T> & v)

{

typename vector<T>::iterator i;

for(i=v.begin();i!=v.end();i++)

{

out.setf(std::ios::scientific);

out.precision(PRECISION_AG);

out << setw(NB_DIGIT_AG) << *i << " ";

}

return out;

}



Merci,



AG.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
AG
Le #306276
Aprés avoir cherché, j'ai l'impression que ça n'est pas possible. J'ai
bon ? Le seul moyen c'est de refaire du formattage par-dessus, en
convertissant le double en chaine de caractère, et en la modifiant de
la manière que l'on veut ?

AG.
James Kanze
Le #306275
On Apr 16, 11:20 am, "AG"
je porte un programme sous linux, et pour vérifier, j'affiche des
valeurs, résultat d'une execution sous Windows, et Linux.

Sauf que pour afficher un double en mode scientifique, Sous linux j'ai
deux chiffres pour l'exposant, alors que sous Windows, j'en ai trois :

version Windows : -3.63376e+000
version Linux : -3.63376e+00


C'est une erreur connue de VC++. La norme dit qu'il faut avoir
toujours deux, sauf quand il en faut plus pour représenter la
valeur.

C'est pas pratique parce que mon comparateurs de fichier ne
sait pas que c'est en fait la même chose. D'ou ma question :
est-il possible de controler le nombre de chiffre utilisé pour
l'affichage de l'exposant ?


Contrôler, non, mais le nombre en est bien défini. Seulement, tu
as un problème parce qu'un des compilateurs n'est pas conforme.
Parmi les solutions possibles :

-- Changer de compilateur sous Windows, pour un qui est
conforme.

-- Générer la conversion de double vers une chaîne, d'où tu
ôtes le caractère en trop, s'il s'y trouve.

-- Modifier l'outil qui fait la comparaison, de façon à ce
qu'il traite les deux chaînes comme égales.

Tu pourrais aussi essayer une chose tout simple : passer le
fichier de sortie de ta verion Windows à travers un script du
genre :
sed 's:([Ee][+-]*)0([0-9][0-9]):12:g'
(Chez moi, j'ai de toute façon prèsque toujours besoin des
scripts de ce genre ; mes fichiers contiennent des dates et des
heures, qu'il ne faut pas comparer.)

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Publicité
Poster une réponse
Anonyme