System.SysUtils.TExtendedHelper

De RAD Studio API Documentation
Aller à : navigation, rechercher

Delphi

TExtendedHelper = record helper for Extended

C++

struct TExtendedHelper /* Helper for real 'System::Extended' */;

Propriétés

Type Visibilité  Source Unité  Parent
helper
class
public
System.SysUtils.pas
System.SysUtils.hpp
System.SysUtils System.SysUtils


Description

Fournit la prise en charge pour l'exécution des opérations de bas niveau sur les valeurs à virgule flottante en précision étendue.

Sur Windows 32 bits, les nombres étendus sont représentés sur 80 bits : 1 bit pour le signe, 15 pour l'exposant, et 64 pour la fraction. Le biais est 16383.

Sur la plate-forme Windows 64 bits et ARM, le type Extended est un alias pour Double. Les nombres Double sont représentés sur 64 bits : 1 bit pour le signe, 11 pour l'exposant et 52 pour la fraction. Le biais est de 1023. Voir Représentation interne du type Extended pour plus d'informations.

Pour assigner tous les bits d'une variable TExtendedHelper aux valeurs données par Sign, Mantissa et Exponent, utilisez la méthode BuildUp.

Les méthodes Exponent, Fraction et Mantissa de TExtendedHelper fournissent l'accès aux parties brutes du nombre.

Remarque : Sur Windows 32 bits, TExtendedHelper offre le support que TExtended80Rec offrait précédemment. Si votre programme manipule toujours le type virgule flottante étendue sur 80 bits sur toutes les plates-formes, il peut utiliser le type TExtended80Rec.

Exemple

var
  aNumber: Extended;

begin  
  aNumber := 28;

  Writeln(Format('Number: %f', [aNumber])) ;
  Writeln(Format('Exponent: %d', [aNumber.Exp]));
  Writeln(Format('Fraction: %x', [aNumber.Frac]));
  Writeln(Format('Mantissa: %x', [aNumber.Mantissa]));
ReadLn;

Sortie console quand SizeOf(Extended) vaut 10 octets :

Number: 28.00
Exponent: 16387
Fraction: E000000000000000
Mantissa: E000000000000000

Sortie console quand SizeOf(Extended) vaut 8 octets :

Number: 28.00
Exponent: 1027
Fraction: C000000000000
Mantissa: 1C000000000000

Le nombre 28 est représenté en binaire par 11100. Après la normalisation, c'est 1.1100 * 2^4.

La propriété Sign a la valeur 0 (False).

L'exposant vaut 4. Si la taille de Extended est de 10 octets (par exemple, sur la plate-forme Windows 32 bits), l'exposant est représenté en précision étendue en tant que 16383 (le biais) + 4 = 16387. 16387 correspond à 100000000000011 en binaire.

Si la taille de Extended est de 8 octets (par exemple, sur la plate-forme Windows 64 bits), l'exposant est représenté en tant que 1023 (le biais) + 4 = 1027. 1027 correspond à 10000000011 en binaire.

Si la taille de Extended est de 10 octets, la fraction contient tous les bits de la mantisse, également appelée le significande, et est égale à 11100. La fraction est représentée sur 64 bits, nous complétons ainsi la séquence 1100 avec des zéros jusqu'à 64 chiffres :
11100000000000000000000000000000000000000000000000000 (en hexadécimal, $E000000000000000).

Si la taille de Extended est de 8 octets, la fraction est formée uniquement à partir des bits après le séparateur décimal en format binaire et est égale à 1100, c'est-à-dire que la valeur de 1 du bit de début est omise. Sur ces plates-formes, la fraction est représentée sur 52 bits, nous complétons ainsi la séquence 1100 jusqu'à 52 chiffres avec des zéros :
11000000000000000000000000000000000000000000000000000 ($C000000000000).

La mantisse, également appelée le significande, contient tous les bits de précision du nombre 11100.

Si la taille de Extended est de 10 octets, la mantisse est représentée sur 64 bits, nous complétons ainsi la séquence 11100 avec des zéros jusqu'à 64 chiffres :
11100000000000000000000000000000000000000000000000000 ($E000000000000000).

Si la taille de Extended est de 8 octets, la mantisse est représentée sur 53 bits, nous complétons ainsi la séquence 11100 avec des zéros jusqu'à 53 chiffres :
11100000000000000000000000000000000000000000000000000 ($1C000000000000).

Voir aussi

Exemples de code