System.SysUtils.TDoubleHelper
Delphi
TDoubleHelper = record helper for Double
C++
typedef void *TDoubleHelper;
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
helper typedef |
public | System.SysUtils.pas System.SysUtils.hpp |
System.SysUtils | System.SysUtils |
説明
単精度浮動小数点値の低レベル操作の実行をサポートします。
Double 値は、64 ビットで表現されます: 1 ビットが Sign(符号)用、11 ビットが Exponent(指数)用、52 ビットが Fraction(少数)用です。 バイアスは 1023 です。 詳細については、Internal Representation of Double Type を参照してください。
TDoubleHelper 変数のすべてのビットに、Sign、Mantissa、Exponent で指定された値を割り当てるには、BuildUp メソッドを使用します。
TDoubleHelper の Exponent、Fraction、Mantissa の各メソッドは、加工されていない数値の要素へのアクセスを提供します。
メモ: TDoubleHelper は、以前に提供されていた TDoubleRec をサポートします。TDoubleRec は廃止予定ですので、TDoubleHelper を代わりに使用してください。
例
var
aNumber: Double;
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]));
end;
コンソール出力:
Number: 28.00 Exponent: 1027 Fraction: C000000000000 Mantissa: 1C000000000000
The number 28 is represented in binary as 11100. 正規化をすると 1.1100 * 2^4 になります。
Sign は 0 です。
Exponent は 4 で、倍精度で表すと 1023(バイアス)+ 4 = 1027 になります。 1027 は 2 進法で 10000000011 です。
Fraction は、2 進数表現では、小数点後のビットから構成され(1100)、つまり、最初のビット値 1 は省略されます。Fraction は 52 ビットで表されるため、1100 の続きを 52 桁になるまで 0 で埋めます: 11000000000000000000000000000000000000000000000000000 (16 進数 では $C000000000000)。
Mantissa は、Fraction とその前の 1 ビットから構成され次のようになります: 11100000000000000000000000000000000000000000000000000 ($1C000000000000)。
関連項目
- System.Double
- System.SysUtils.TSingleHelper
- System.SysUtils.TExtendedHelper
- System.SysUtils.TDoubleHelper.Sign
- System.SysUtils.TDoubleHelper.Frac
- System.SysUtils.TDoubleHelper.Exp
- System.SysUtils.TDoubleHelper.BuildUp
- System.SysUtils.TDoubleHelper.Exponent
- System.SysUtils.TDoubleHelper.Fraction
- System.SysUtils.TDoubleHelper.Mantissa
- System.TDoubleRec