System.SysUtils.TDoubleHelper

提供: RAD Studio API Documentation
移動先: 案内検索

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 変数のすべてのビットに、SignMantissaExponent で指定された値を割り当てるには、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

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)。

関連項目

コード サンプル