System.SysUtils.TExtendedHelper
Delphi
TExtendedHelper = record helper for Extended
C++
struct TExtendedHelper /* Helper for real 'System::Extended' */;
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
helper class |
public | System.SysUtils.pas System.SysUtils.hpp |
System.SysUtils | System.SysUtils |
説明
拡張精度(Extended 型)浮動小数点値に対する低レベル演算を実行できるようにします。
32 ビット Windows では、Extended 数値は 80 ビットで表されます: 1 ビットが Sign(符号)用、15 ビットが Exponent(指数)用、64 ビットが Fraction(少数)用です。 バイアスは 16383 です。
64 ビット Windows と ARM プラットフォームでは、Extended 型は Double のエイリアスです。Double 型実数(倍精度実数)は 64 ビットで表されます。つまり、符号部に 1 ビット、指数部に 11 ビット、小数部に 52 ビットです。バイアスは 1023 です。詳細については、「Extended 型の内部表現」を参照してください。
TExtendedHelper 型変数のすべてのビットに、符号部、仮数部、指数部で与えられた値を割り当てるには、BuildUp メソッドを使用します。
TExtendedHelper のメソッド Exponent、Fraction、Mantissa を使用すると、数値の構成要素に直接アクセスできます。
メモ: 32 ビット Windows では、TExtendedHelper は、これまで TExtended80Rec で提供されていたサポートを提供します。プログラムでは、すべてのプラットフォームで 80 ビット拡張精度浮動小数点型が依然として操作される場合、TExtended80Rec 型を使用できます。
例
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;
SizeOf(Extended) が 10 バイトの場合のコンソール出力:
Number: 28.00 Exponent: 16387 Fraction: E000000000000000 Mantissa: E000000000000000
SizeOf(Extended) が 8 バイトの場合のコンソール出力:
Number: 28.00 Exponent: 1027 Fraction: C000000000000 Mantissa: 1C000000000000
28 という数値は、2 進法では 11100 と表されます。正規化後は 1.1100 * 2^4 になります。
符号部は 0(False)です。
指数部 は 4 です。ただし、Extended のサイズが 10 バイトの場合(たとえば 32 ビット Windows プラットフォームなど)、指数部は拡張精度で 16383(バイアス)+ 4 = 16387 と表されます。16387 は 2 進法で 100000000000011 です。
Extended のサイズが 8 バイトの場合(たとえば 64 ビット Windows プラットフォームなど)、指数部は 1023(バイアス)+ 4 = 1027 と表されます。1027 は 2 進法で 10000000011 です。
Extended のサイズが 10 バイトの場合、小数部は仮数部のすべてのビットを含んでおり、11100 に等しくなります。小数部は 64 ビットで表されるため、11100 の続きを 64 桁までゼロで埋めて
11100000000000000000000000000000000000000000000000000 となります(16 進法では $E000000000000000 です)。
Extended のサイズが 8 バイトの場合、小数部は小数点記号の後のビットのみから 2 進形式で構成され、1100 に等しくなります。つまり、先頭ビットの値 1 が省略されています。このようなプラットフォームでは、小数部は 52 ビットで表されるため、1100 の続きを 52 桁までゼロで埋めて
11000000000000000000000000000000000000000000000000000 となります(16 進法では $C000000000000 です)。
仮数部には、数値のすべての精度ビット 11100 が含まれています。
Extended のサイズが 10 バイトの場合、仮数部は 64 ビットで表されるため、11100 の続きを 64 桁までゼロで埋めて
11100000000000000000000000000000000000000000000000000 となります(16 進法では $E000000000000000 です)。
Extended のサイズが 8 バイトの場合、仮数部は 53 ビットで表されるため、11100 の続きを 53 桁までゼロで埋めて
11100000000000000000000000000000000000000000000000000 となります(16 進法では $1C000000000000 です)。
関連項目
- System.Extended
- System.SysUtils.TSingleHelper
- System.SysUtils.TDoubleHelper
- System.SysUtils.TExtendedHelper.Sign
- System.SysUtils.TExtendedHelper.Frac
- System.SysUtils.TExtendedHelper.Exp
- System.SysUtils.TExtendedHelper.BuildUp
- System.SysUtils.TExtendedHelper.Exponent
- System.SysUtils.TExtendedHelper.Fraction
- System.SysUtils.TExtendedHelper.Mantissa
- System.TExtended80Rec
- 浮動小数点の精度の制御(Delphi for x64)
- Extended 型の内部表現