Vous pouvez obtenir un NaN signé depuis le NaN-ness de la valeur et le signe de la valeur sont contrôlés par différents bits IEEE754 (NaN est simplement indiquée par des valeurs d'exposant spéciales, distinctes du bit de signe). Je ne sais pas quel genre d'opération le ferait.
Il est possible que l'une des opérations normales qui produisent NaN pourrait causer une variation négative (comme +0/-0
ou +Inf/-Inf
). Mais j'aurais pensé que NaNs imprimerait nan
indépendamment du signe.
Cependant, bien que la norme spécifie en détail comment les nombres sont traités, il est étrangement silencieux sur la façon dont ils sont imprimés. Les listes Wikipedia page for NaN ces:
nan NaN NaN% NAN NaNQ
NaNS qNaN sNaN 1.#SNAN 1.#QNAN
-1.#IND -NaN NaN12345 -sNaN12300
avec certains de ces signes montrant et la charge utile supplémentaire.
Notez que je parle ici des normes IEEE. Les normes ISO C indiquent un nombre limité de formulaires, mais le fait que le signe et/ou la charge utile soit imprimé dépend de l'implémentation. Je peux seulement supposer que les versions ultérieures de la bibliothèque ont changé leur comportement. Comment résoudre ce problème dans le compilateur, je ne suis pas sûr. Je prendrais juste l'approche pragmatique et exécuterais votre dossier de sortie par quelque chose comme sed 's/-nan/nan/g'
. J'espère que cela ne va pas introduire d'autres problèmes.
Et vous devriez également garder un œil sur le formulaire qui permet l'impression de la charge utile, bien que je ne m'inquiète que lorsque les tests commencent à échouer à nouveau. Mais j'ai placé un commentaire quelque part près de cette commande sed
indiquant que cela pourrait arriver à un moment donné dans le futur. De cette façon, au moins le gars qui vous suit comprendra pourquoi.
Quel calcul faites-vous que les résultats dans une telle valeur ? –
Que voulez-vous dire par "signé nan"? Voulez-vous dire négatif? Jetant un coup d'œil sur l'article de Wikipédia, les NaN sont explicitement signés. –
"cout << 0./0. << endl" les résultats sont "-nan" sur tous mes systèmes Ubuntu Lucid Lynx, et "nan" sur Mac OS X Snow Leopard et Ubuntu Hardy Heron. Ce sont tous les systèmes x86_64. – Juan