Valeurs à virgule flottante

Les automates Logix gèrent les valeurs à virgule flottante conformément à la norme IEEE 754 sur l’arithmétique à virgule flottante. Cette norme définit comment les nombres à virgule flottante sont stockés et calculés. La norme IEEE 754 pour les mathématiques à virgule flottante a été conçue pour offrir de la rapidité et la capacité de gérer de très grands nombres dans un espace de stockage raisonnable.
Une balise REAL stocke un nombre à virgule flottante normalisé en simple précision.
Une balise LREAL stocke un nombre à virgule flottante normalisé en double précision.
Les automates prennent en charge les types de données élémentaires suivants :
  • REAL
  • LREAL
Les nombres dénormalisés et -0,0 sont traités comme 0,0.
Si un calcul produit une valeur NAN, le bit du signe peut être positif ou négatif. Dans cette situation, le logiciel affiche 1#.NAN sans signe.
Les valeurs décimales ne peuvent pas toutes être exactement représentées dans ce format standard, ce qui entraîne une perte de précision. Par exemple, si vous soustrayez 10 de 10,1, vous vous attendez à ce que le résultat soit 0,1. Dans un automate Logix, le résultat pourrait très bien être 0,10000038. Dans cet exemple, la différence entre 0,1 et 0,10000038 est de 0,000038 %, soit presque zéro. Pour la plupart des opérations, cette petite imprécision est minime. Pour replacer les choses dans leur contexte, si vous envoyez une valeur à virgule flottante vers un module de sortie analogique, il n’y a aucune différence dans la tension de sortie pour une valeur envoyée au module qui présente une différence de 0,000038 %.
Recommandations pour les opérations mathématiques sur les nombres à virgule flottante
Respectez les recommandations suivantes :
Lorsque vous effectuez certaines opérations mathématiques avec des nombres à virgule flottante, il peut y avoir une perte de précision en raison de l’erreur d’arrondi. Les processeurs à virgule flottante possèdent leur propre précision interne qui peut avoir une incidence sur les valeurs résultantes.
N’utilisez pas les calculs à virgule flottante pour des valeurs monétaires ou pour des fonctions de totalisation. Utilisez des valeurs INT ou DINT, multipliez les valeurs par un facteur, et gardez la trace de la position décimale (ou utilisez une valeur INT ou DINT pour les dollars et une deuxième valeur INT ou DINT pour les centimes).
Ne comparez pas des nombres à virgule flottante. Vérifiez plutôt si les valeurs sont comprises dans une plage. L’instruction LIMIT est fournie spécifiquement à cet effet.
Exemples de fonctions de totalisation
La précision du type de données REAL affecte les applications de totalisation, de sorte que des erreurs se produisent lorsqu’on ajoute de très petits nombres à de très grands nombres.
Par exemple, additionner 1 à un nombre sur une période de temps. Il arrivera un point où cette addition ne modifiera plus le résultat, car la somme accumulée sera trop importante et la capacité en bits ne permettra plus de représenter la valeur complète. L’ajout stocke autant de bits de poids fort que possible et ignore les bits de poids faible restants.
Pour contourner cela, effectuez des opérations mathématiques sur de petits nombres jusqu’à ce que les résultats deviennent grands. Ensuite, transférez-les vers un autre emplacement pour effectuer des opérations mathématiques supplémentaires sur des nombres plus grands. Par exemple :
  • x est la petite variable incrémentée.
  • y est la grande variable incrémentée.
  • z est le nombre total actuel pouvant être utilisé n’importe où.
  • x = x+1;
  • if x = 100 000;
  • {
  • y = y + 100 000;
  • x = 0;
  • }
  • z = y + x;
Voici un autre exemple :
  • x = x + some_tiny_number;
  • if (x >= 100)
  • {
  • z = z + 100;
  • x = x - 100; // il peut demeurer un infime reste
  • }
Fournir une réponse
Vous avez des questions ou des commentaires sur cette documentation ? Veuillez envoyer vos commentaires ici.
Normal