Comment s’assurer que les NaN se propagent lors de l’utilisation d’insortingnsèques SSE?

J’ai récemment lu ceci à propos des valeurs NaN dans les opérations arithmétiques SSE:

Le résultat des opérations arithmétiques agissant sur deux arguments NAN (non un nombre) est indéfini. Par conséquent, les opérations à virgule flottante utilisant des arguments NAN ne correspondront pas au comportement attendu des instructions d’assemblage correspondantes.

Source: http://msdn.microsoft.com/en-us/library/x5c07e2a(v=vs.100).aspx

Est-ce que cela signifie que, par exemple, append deux valeurs __m128 pourrait convertir un NaN en réel?

Si un calcul repose sur une valeur de NaN , il faut que le résultat final soit également NaN . Y a-t-il un moyen de faire ça?

Lorsque j’interprète ce texte, il indique que le compilateur propose divers éléments insortingnsèques qui correspondent approximativement aux instructions SSE. En règle générale, vous pouvez vous attendre à ce que le compilateur utilise les instructions SSE pour implémenter les éléments insortingnsèques. Cependant, ce n’est pas ssortingct. Les éléments insortingnsèques spécifient en fait des opérations dans un modèle de calcul abstrait; ils ne spécifient pas directement les instructions SSE. Dans ce modèle abstrait, le résultat d’une opération sur deux NaN (curieux qu’il ne semble pas permettre un NaN et un nombre) est indéfini. Par conséquent, le résultat obtenu, par exemple, en ajoutant deux NaN peut ne pas être un NaN.

En particulier, les opérations du modèle abstrait seraient sujettes à des optimisations du compilateur, qui pourraient donner lieu à des opérations autres que les instructions SSE (calculs au moment de la compilation, instructions omises si le compilateur peut en déduire que des NaN sont présents, de sorte qu’il n’est pas nécessaire effectuer un ajout, et cetera).

Il semble que si vous voulez garantir la sémantique spécifiée pour les instructions SSE, vous devrez peut-être écrire en langage assembleur plutôt que d’utiliser des éléments insortingnsèques dans le compilateur de Microsoft.

Je souhaite que les fournisseurs cessent de s’attarder sur la sémantique à virgule flottante. Il est difficile de faire de l’ingénierie en l’absence de comportement bien spécifié.