comportement affleurant à zéro dans l’arithmétique à virgule flottante

Pour autant que je m’en souvienne, IEEE 754 ne dit rien sur le mode de mise à zéro permettant de traiter plus rapidement les numéros dénormalisés , mais certaines architectures proposent ce mode (par exemple, http://docs.sun.com/source/806-3568/ncg_lib .html ).

Dans le cas particulier de cette documentation technique, la gestion standard des nombres dénormalisés est la méthode par défaut et la mise à zéro doit être activée explicitement. En mode par défaut, les nombres dénormalisés sont également gérés dans le logiciel, ce qui est plus lent.

Je travaille sur un parsingur statique pour C intégré qui essaie de prédire des plages correctes (si parfois imprécises) pour les valeurs pouvant exister au moment de l’exécution. Il vise à être correct car il est censé être utilisable pour exclure la possibilité d’un problème lors de l’exécution (par exemple, pour du code embarqué critique). Cela nécessite d’avoir capturé tous les comportements possibles lors de l’parsing, et donc toutes les valeurs possibles générées lors des calculs en virgule flottante.

Dans ce contexte, ma question est double:

  1. Parmi les architectures intégrées, y a-t-il des architectures qui offrent uniquement un alignement à zéro ? Ils n’auraient peut-être pas le droit de s’annoncer eux-mêmes sous le nom “IEEE 754”, mais pourraient proposer des opérations en virgule flottante similaires à celles du modèle IEEE 754.

  2. Pour les architectures qui offrent les deux, dans un contexte embarqué, la mise à zéro-à-zéro n’est -elle pas susceptible d’être activée par le système , afin de rendre le temps de réaction plus prévisible (une contrainte commune pour ces systèmes embarqués)?

Le traitement de la mise à zéro dans l’arithmétique d’intervalle que j’utilise pour les valeurs à virgule flottante est assez simple si je sais que je dois le faire, ma question est plutôt de savoir si je dois le faire ou non.

Oui aux deux questions. Certaines plates-formes prennent en charge uniquement la mise à zéro, et il existe de nombreuses plates-formes pour lesquelles la mise à zéro est la valeur par défaut.

Vous devez également savoir que de nombreuses plates-formes incorporées et dsp utilisent un mode “Denormals Are Zero”, qui est un autre pli dans la sémantique à virgule flottante.


Modifier des explications supplémentaires sur la ZF par rapport à la DAZ:

Dans la zone franche, lorsqu’une opération produirait un résultat dénormal sous l’arithmétique habituelle, un zéro est renvoyé. Notez que certaines implémentations sont toujours vides au zéro positif, alors que d’autres peuvent être vides au zéro positif ou négatif. Il vaut probablement mieux ne pas dépendre de l’un ou l’autre comportement.

En DAZ, lorsqu’une entrée dans une opération est un dénormal, un zéro est substitué à sa place. Encore une fois, il n’existe aucune garantie générale quant à la substitution du zéro.

Certaines implémentations prenant en charge ces modes permettent de les définir indépendamment (et certaines ne prennent en charge qu’un seul des deux). Il peut donc être nécessaire de pouvoir modéliser l’un ou l’autre mode indépendamment ou ensemble.

Notez également que certaines implémentations combinent ces deux modes dans “Flush to Zero”. Le mode ARM VFP “purger à zéro” est à la fois FTZ et DAZ, par exemple.

Les cœurs ARM Cortex ont une option de mise à zéro, difficile de voir comment vous pouvez l’ignorer. Encore une fois, ne prenez pas les conseils commerciaux d’un forum. Parlez à vos clients.