浮動小数点の精度の制御(Delphi for x64)
Delphi コンパイラ指令のリスト:インデックス への移動
種類 |
スイッチ |
構文 |
{$EXCESSPRECISION ON}、{$EXCESSPRECISION OFF} |
デフォルト |
{$EXCESSPRECISION ON} |
スコープ |
ローカル |
説明
$EXCESSPRECISION 指令では、単精度(32 ビット)浮動小数点式の中間結果をコンパイラでどのように扱うかを制御します。 $EXCESSPRECISION は、Delphi コンパイラの x64 ターゲット CPU に固有の指令です。
単精度浮動小数点値だけが含まれる x64 のすべての算術演算および算術式では、デフォルトで、中間結果を倍精度(64 ビット)浮動小数点値として格納することで精度を高く保っています。 その結果、そのような演算は、倍精度浮動小数点演算と比べて速度が低くなります(コンパイル済みコードでは演算ごとに単精度の値が倍精度に変換されるため)。
実行速度が一番の問題なのであれば、対象のコードに {$EXCESSPRECISION OFF} 指令を付けて、中間の倍精度値を使わないようにします。そうでなければ、デフォルトの指令({$EXCESSPRECISION ON})のままで結果値の精度を向上することをお勧めします。
x86 ターゲット CPU では、$EXCESSPRECISION 指令は効果がありません。 このプラットフォームで生成されるコードでは FPU(浮動小数点演算ユニット)が使われていて、どの種類の演算でも中間結果が拡張精度(80 ビット)浮動小数点値で格納されるからです。