System.SysUtils.TDoubleHelper

提供: Appmethod Libraries
移動先: 案内検索

Object Pascal

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 ビット、指数部に 11 ビット、小数部に 52 ビットです。バイアスは 1023 です。詳細については、「Double 型の内部表現」を参照してください。

TDoubleHelper 型変数のすべてのビットに、符号部仮数部指数部で与えられた値を割り当てるには、BuildUp メソッドを使用します。

TDoubleHelperExponentFractionMantissa の各メソッドを使用すると、数値の構成要素に直接アクセスできます。

メモ: 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

28 という数値は、2 進法では 11100 と表されます。正規化後は 1.1100 * 2^4 になります。

符号部は 0 です。

指数部は 4 で、倍精度で表すと 1023(バイアス)+ 4 = 1027 になります。

1027 は 2 進法で 10000000011 です。

小数部は小数点記号の後のビットから 2 進形式で構成されます(つまり 1100)。先頭ビットの値 1 が省略されています。小数部は 52 ビットで表されるため、1100 の続きを 52 桁までゼロで埋めて 11000000000000000000000000000000000000000000000000000 となります。16 進法では $C000000000000 です。

仮数部小数部とその前の 1 ビットで構成され、11100000000000000000000000000000000000000000000000000 となります(16 進法では $1C000000000000)。

関連項目

コード例