En C ++, ai-je la garantie que, pour chaque float a
et float b
, un et un seul parmi a < b
, a == b
et a > b
est vrai?
Si cela diffère entre les compilateurs et les plates-formes, je suis intéressé par Visual C ++ sur x86.
En C ++, ai-je la garantie que, pour chaque float a
et float b
, un et un seul parmi a < b
, a == b
et a > b
est vrai?
Si cela diffère entre les compilateurs et les plates-formes, je suis intéressé par Visual C ++ sur x86.
Pas de.
C'est suffisant pour que soit a
ou b
être NaN
pour chacun des a < b
, a == b
et a > b
faux.
Si les deux a
et b
sont non-NaN alors exactement l'une des a < b
, a == b
ou a > b
doit être vrai.
En complément, cette réponse vous indique comment vous pouvez obtenir une valeur NaN en C++ (il y a plusieurs valeurs NaN, qui peuvent être distingués par l'inspection de leurs représentations; ils sont tous différents les uns des autres parce que NaN n'est jamais égal à rien) et comment vous pouvez tester si une valeur est un NaN (un idiomatiques test pour voir si une variable x
est un NaN est - x != x
, et en effet std::isnan()
est souvent mise en œuvre de cette façon, mais certains programmeurs qui auront à lire votre code peut être confondue par elle).
Et puis, si a
et b
sont les résultats des calculs précédents, il y a le problème de l'excès de précision. Voir cet article pour une discussion en C. Le standard C99 résolu le problème par l'élaboration de règles explicites pour où l'excès de précision pouvait et ne pouvait pas se produire, mais en dépit de C++ plus ou moins hériter de ces règles par le report de la norme pour la définition de l' FLT_EVAL_METHOD
en cfloat
, dans la pratique, les compilateurs C prendre les règles plus gravement que les compilateurs C++. Par exemple GCC met en œuvre les règles de C lors de la compilation avec -std=c99
, et, dans ce contexte, vous pouvez compter sur la propriété, mais de cette écriture GCC ne pas mettre en œuvre ces règles lorsqu'il est utilisé comme un compilateur C++.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.