Section courante

A propos

Section administrative du site

Conversions dans SANE

SANE fournit des conversions entre le type étendu et chacun des autres types SANE (Single, Double et Comp). Une implémentation SANE particulière fournit également des conversions entre les types étendus et les types numériques pris en charge dans son environnement plus large particulier, comme illustré dans l'image suivante. Par exemple, une implémentation Pascal inclut des conversions entre le type étendu et le type entier Pascal.

Les implémentations SANE fournissent également soit des conversions entre des chaînes de caractères décimales et des types SANE, soit des conversions entre un type d'enregistrement décimal et des types SANE, soit les deux. Les conversions entre les enregistrements décimaux et les chaînes de caractères décimales peuvent également être incluses.

Conversions entre Extended et Single ou Double

Une conversion en étendue est toujours exacte. Une conversion de Extended vers Single ou Double déplace une valeur vers un type d'entreposage avec moins d'intervalle et de précision, et définit les indicateurs d'exception de dépassement de capacité, de dépassement inférieur et inexact selon le cas.

Remarque Pascal : avec les extensions SANE d'Apple, Pascal effectue la conversion entre le format étendu et les formats simples ou doubles dans les cas suivants :

Conversions d'Extended à Single ou Double

  1. Function Num2Real(x:Extended):Real;
  2. Function Num2Double(x:Extended):Double;

Ces fonctions de conversion sont utiles lorsque vous souhaitez contraindre un résultat au format Single ou Double sans utiliser d'instruction d'affectation séparée. Par exemple, vous pouvez utiliser une fonction de conversion pour tester une variable à forme unique par rapport à une expression, comme illustré dans l'exemple suivant.

Exemple : X est-il négligeable ?

Supposons que vous ayez besoin de savoir si une valeur de simple précision x est négligeable par rapport à une autre valeur simple précision y. Vous pouvez effectuer un calcul pour le déterminer, par exemple :

  1. If((y + x) = y)Then Xneglig:=true;

Étant donné que les implémentations SANE évaluent (y + x) au format Extended et effectuent la comparaison au format Extended, le test ne fonctionnera pas comme vous pourriez l'attendre. La déclaration ci-dessus donne à Xneglig la valeur vraie uniquement pour les valeurs beaucoup plus petites de x étant n négligeables par rapport à la précision étendue. Pour déterminer si x est négligeable simplement par rapport à la simple précision, vous pouvez arrondir (y + x) co simple, comme ceci :

  1. If(Num2Real(y + x) = y) then Xneglig:=true;

Conversions en Comp et autres formats intégraux

  1. Function Num2Integer(x:Extended):Integer;
  2. Function Num2Longint(x:Extended):LongInt;
  3. Function Num2Comp(x:Extended):Comp;

Les routines SANE convertissent les nombres en formats entiers en arrondissant d'abord à une valeur entière (en respectant le sens d'arrondi actuel) puis, si possible, en transmettant cette valeur au format de destination. Si l'opérande source d'une conversion d'Extended en Comp est un NaN, un Infinity ou en dehors de l'intervalle pour le format Comp, alors le résultat est le NaN de Comp. Si la source est un Infinity ou est en dehors de l'intervalle, l'exception invalide est signalée.

Pour la conversion en un type entier spécifique au système (n'ayant pas de représentation appropriée pour le résultat exceptionnel), si l'opérande source est un NaN, un infini ou est en dehors de l'intervalle pour ce type, alors invalide est signalé.

Notez que l'arrondi IEEE en formats intégraux diffère des fonctions d'arrondi les plus courantes sur les cas intermédiaires. Avec le sens d'arrondi par défaut (au plus proche), les conversions en Comp ou en un type d'entier spécifique au système arrondiront 0,5 à 0, 1,5 à 2, 2,5 à 2 et 3,5 à 4, arrondi à pair sur les cas intermédiaires.

Conversions entre binaire et décimal

La norme IEEE pour l'arithmétique binaire à virgule flottante spécifie l'ensemble de valeurs numériques représentables dans chaque format à virgule flottante. Il est important de reconnaître que les formats d'entreposage binaires ne peuvent représenter exactement la partie fractionnaire des nombres décimaux que dans quelques cas; dans tous les autres cas, la représentation sera approximative.



Dernière mise à jour : Mercredi, le 8 février 2023