System.SysUtils.TExtendedHelper

Aus RAD Studio API Documentation
Wechseln zu: Navigation, Suche

Delphi

TExtendedHelper = record helper for Extended

C++

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

Eigenschaften

Typ Sichtbarkeit Quelle Unit Übergeordnet
helper
class
public
System.SysUtils.pas
System.SysUtils.hpp
System.SysUtils System.SysUtils

Beschreibung

Stellt die Unterstützung für die Durchführung von Low-Level-Operationen mit Gleitkommawerten mit der Genauigkeit Extended bereit.

Auf 32-Bit-Windows werden Extended-Zahlen mit 80 Bit dargestellt: 1 Bit für Sign, 15 für Exponent, und 64 für Fraction. Das Bias ist 16383. Auf 64-Bit-Windows und der ARM-Plattform ist der Typ Extended ein Alias für Double. Double-Zahlen werden mit 64 Bit dargestellt: 1 Bit für Sign, 11 für Exponent und 52 für Fraction. Das Bias ist 1023. Unter Interne Darstellung des Typs Extended finden Sie weitere Informationen.

Mit der Methode BuildUp können Sie alle Bits einer TExtendedHelper-Variable mit den in Sign, Mantissa und Exponent angegebenen Werten zuweisen.

Mit den Methoden Exponent, Fraction und Mantissa von TExtendedHelper können Sie auf die einzelnen Teile der Zahl zugreifen.

Hinweis: Auf 32-Bit-Windows bietet TExtendedHelper die Unterstützung, die früher TExtended80Rec bereitstellte. Wenn in Ihrem Programm noch 80-Bit-Gleitkommatypen mit der Genauigkeit "extended" auf allen Plattformen verarbeitet werden, können Sie den Typ TExtended80Rec verwenden.

Beispiel

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;

Konsolenausgabe, wenn SizeOf(Extended) 10 Byte ist:

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

Konsolenausgabe, wenn SizeOf(Extended) 8 Byte ist:

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

Die Zahl 28 wird binär als 11100 dargestellt. Nach der Normalisierung lautet sie 1,1100 * 2^4.

Sign ist 0 (False).

Der Exponent ist 4. Wenn Extended 10 Byte groß ist (z. B. auf der 32-Bit-Windows-Plattform), wird Exponent mit der Genauigkeit "extended" als 16383 (dem Bias) + 4 = 16387 dargestellt. 16387 ist binär 100000000000011.

Wenn die Größe von Extended 8 Byte ist (z. B. auf der 64-Bit-Windows-Plattform), wird Exponent als 1023 (dem Bias) + 4 = 1027 dargestellt. 1027 ist binär 10000000011.

Wenn Extended 10 Byte groß ist, enthält Fraction alle Bits der Mantisse (Mantissa) und ist gleich 11100. Fraction wird mit 64 Bit dargestellt, daher wird die 11100-Folge bis zu 64 Stellen mit Nullen aufgefüllt:
11100000000000000000000000000000000000000000000000000 (hexadezimal: $E000000000000000).

Wenn Extended 8 Byte groß ist, wird Fraction in binärer Form nur aus den Bits nach dem Dezimalzeichen gebildet und ist gleich 1100, d. h., der Wert 1 des führenden Bits wird weggelassen. Auf solchen Plattformen wird Fraction mit 52 Bit dargestellt, daher wird die 1100-Folge bis zu 52 Stellen mit Nullen aufgefüllt:
11000000000000000000000000000000000000000000000000000 ($C000000000000).

Die Mantisse (Mantissa) enthält alle Genauigkeits-Bits der Zahl 11100.

Wenn Extended 10 Byte groß ist, wird die Mantisse (Mantissa) mit 64 Bit dargestellt, daher wird die 11100-Folge bis zu 64 Stellen mit Nullen aufgefüllt:
11100000000000000000000000000000000000000000000000000 ($E000000000000000).

Wenn Extended 8 Byte groß ist, wird die Mantisse (Mantissa) mit 53 Bit dargestellt, daher wird die 11100-Folge bis zu 53 Stellen mit Nullen aufgefüllt:
11100000000000000000000000000000000000000000000000000 ($1C000000000000).

Siehe auch

Codebeispiele