Pentium 対応の FDIV 演算(Delphi)
Delphi コンパイラ指令のリスト:インデックス への移動
種類 |
スイッチ |
構文 |
{$U+} または {$U-} {$SAFEDIVIDE ON} または {$SAFEDIVIDE OFF} |
デフォルト |
{$U-} |
スコープ |
ローカル |
$U 指令は,初期の Pentium プロセッサの FDIV 命令の欠陥に対応した浮動小数点コードの生成を制御します。Windows 95 および Windows NT 3.51 以降には,Pentium FDIV のバグをシステムレベルで修正するコードが含まれています。
{$U+} 状態にすると,すべての浮動小数点除算はランタイムライブラリルーチンを使って実行されます。浮動小数点除算ルーチンが初めて呼び出されると,プロセッサの FDIV 命令が正しく機能するかチェックします。そして,TestFDIV 変数(System ユニットで宣言されている)を適切に更新します。その後の浮動小数点除算では,TestFDIV に格納されている値によって動作が決定されます。
値の意味
-1 FDIV 命令がテストされ,欠陥が検出された
0 FDIV 命令はまだテストされていない
1 FDIV 命令がテストされ,正常であることが検出された
FDIV の欠陥のないプロセッサの場合,{$U+} によりわずかに処理速度が低下します。欠陥のある Pentium プロセッサの場合,これが {$U+} 状態にあるときは浮動小数点除算に最大で約 3 倍の時間がかかりますが,常に正しい結果が得られます。
{$U-} 状態にすると,浮動小数点除算はインラインの FDIV 命令を使って実行されます。これにより,最適な速度とコードサイズが得られますが,欠陥のある Pentium プロセッサでは誤った結果が与えられる可能性があります。{$U-} 状態は,コードが欠陥のある Pentium プロセッサ上で実行されないことが確実な場合にのみ使用してください。