Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

problème avec std::numeric_limits::infinity()

4 réponses
Avatar
Marc Guéguen
Bonjour,
J'utilise une classe dérivée de std::numpunct pour le formatage des nombres,
définie comme suit (en simplifié pour aller à l'essentiel)

class owner_defined_facet : public std::numpunct<char> {
virtual std::string do_grouping() const { return "\03"; }
virtual char do_thousands_sep() const { return ' ';}
virtual char do_decimal_point() const { return ',';}
};

Ensuite, je fais
std::locale the_one(std::locale(),owner_defined_facet());
std::basic_ostringstream<char> *ossPtr=new std::basic_ostringstream<char>;
ossPtr->imbue( the_one);
// et pour écrire dans le flux le nombre d
ossPtr->operator<<(d);
// avec ceci pour récupérer la valeur
ossPtr->str();

Mon problème, ça plante avec std::numeric_limits<long double>::infinity()
comme valeur de d
Et ça fonctionne si je supprime le séparateur des milliers comme ceci
virtual std::string do_grouping() const { return "\0"; }

Est-ce que vous voyez où est le problème ?

Une autre question : comment un nombre se voit affecter la valeur
std::numeric_limits<long double>::infinity(),
si ce n'est pas par affectation directe ?

Merci bien.

4 réponses

Avatar
Marc Guéguen
Précision :
J'obtiens en fait la sortie suivante
+IN F00 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000....
avec encore plein de zéros !
Avatar
Olivier Miakinen
Bonjour,

Le 08/11/2012 14:42, Marc Guéguen a écrit :

Une autre question : comment un nombre se voit affecter la valeur
std::numeric_limits<long double>::infinity(),
si ce n'est pas par affectation directe ?



Est-ce que « long double valeur = 1.L/0.L; », c'est ce que tu appelles
une affectation directe ?

Si oui, il y a :
long double valeur = 1.L;
valeur /= 0.L;

Mais tu peux aussi multiplier std::numeric_limits<long double>::max()
par lui-même.

Enfin... j'espère ne pas être à côté de la plaque car je n'ai jamais
utilisé tout ça.

Cordialement,
--
Olivier Miakinen
Avatar
Marc Guéguen
Je te remercie pour ta réponse.
Reste le problème du formatage...

"Olivier Miakinen" <om+ a écrit dans le message de
news:k7heio$88h$
Bonjour,

Le 08/11/2012 14:42, Marc Guéguen a écrit :

Une autre question : comment un nombre se voit affecter la valeur
std::numeric_limits<long double>::infinity(),
si ce n'est pas par affectation directe ?



Est-ce que « long double valeur = 1.L/0.L; », c'est ce que tu appelles
une affectation directe ?

Si oui, il y a :
long double valeur = 1.L;
valeur /= 0.L;

Mais tu peux aussi multiplier std::numeric_limits<long double>::max()
par lui-même.

Enfin... j'espère ne pas être à côté de la plaque car je n'ai jamais
utilisé tout ça.

Cordialement,
--
Olivier Miakinen
Avatar
Olivier Miakinen
Bonjour,

Le 09/11/2012 13:50, Marc Guéguen a écrit :
Je te remercie pour ta réponse.
Reste le problème du formatage...

"Olivier Miakinen" <om+ a écrit dans le message de
news:k7heio$88h$
[copie intégrale, signature comprise]





Concernant le formatage de la valeur infinie avec std::numpunct, je n'ai
pas la réponse. Mais pour ce qui est du formatage des réponses dans les
news, voici la doc à lire :
<http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html>.

Cordialement,
--
Olivier Miakinen