浮動小数点オペレーションの例外マスク
RAD Studio Athens(R120)より、浮動小数点関連の例外マスクがすべてオンになります。 デフォルトでは、アプリケーションはすべてのプラットフォームで浮動小数点例外を発生させなくなります。
Delphi RTL のデフォルトの設定では、すべての浮動小数点関連の例外は無効化されています。
プラットフォーム | System でのコントロール変数名 | 11.3 以降 | 12.0 以降 |
---|---|---|---|
Win/x32 | Default8087CW | $1332 | $033F |
Win/x64 | DefaultMXCSR | $1900 | $1F80 |
macOS/x64 | DefaultFPEnv | $0032 | $003F |
macOS/Arm64 | DefaultFPSCR | $0000_0700 | $0000_0000 |
iOS/Arm64 | DefaultFPSCR | $0000_0700 | $0000_0000 |
iOS-Sim/Arm64 | DefaultFPSCR | $0000_0700 | $0000_0000 |
Android/Arm32 | DefaultFPSCR | $0000_0700 | $0000_0000 |
Android/Arm64 | DefaultFPSCR | $0000_0700 | $0000_0000 |
Linux/x64 | DefaultFPEnv | $0032 | $003F |
新旧での動作の一覧
プラットフォーム | プログラムの種類 | 旧動作 | 新動作 | ||
---|---|---|---|---|---|
1/0 | sqrt (-1) | 1/0 | sqrt (-1) | ||
Win/x32
Win/x64 |
デフォルト / コンソール / VCL | EZeroDivide 例外 [1]
結果は未定義。 |
EInvalidOp 例外[1]
結果は未定義。 |
例外なし
結果は Inf |
例外なし
結果は NAN |
Win/x32
Win/x64 |
fmx | 例外なし [2]
結果は Inf |
例外なし [2]
結果は NAN |
例外なし
結果は Inf |
例外なし
NaN |
macOS/x64 | FMX/コンソール | 例外なし
結果は Inf |
EInvalidOp 例外
結果は未定義。 |
例外なし
結果は Inf |
例外なし
結果は NAN |
macOS/Arm64 | FMX/コンソール | 例外なし
結果は Inf |
例外なし [3]
結果は NAN |
例外なし
結果は Inf |
例外なし
結果は NAN |
iOS/Arm64 | fmx | 例外なし
結果は Inf |
EInvalidOp 例外
結果は未定義。 |
例外なし
結果は Inf |
例外なし
結果は NAN |
iOS-Sim/Arm64 | fmx | 例外なし
結果は Inf |
EInvalidOp 例外
結果は未定義。 |
例外なし
結果は Inf |
例外なし
結果は NAN |
Android/Arm32 | fmx | 例外なし
結果は Inf |
EInvalidOp 例外
結果は未定義。 |
例外なし
結果は Inf |
例外なし
結果は NAN |
Android/Arm64 | fmx | 例外なし
結果は Inf |
EInvalidOp 例外
結果は未定義。 |
例外なし
結果は Inf |
例外なし
結果は NAN |
Linux/x64 | コンソール | 例外なし
結果は Inf |
EInvalidOp 例外
結果は未定義。 |
例外なし
結果は Inf |
例外なし
結果は NAN |
<references>
</references>
以前の動作に復元するには
例外の動作を以前のものに戻したい場合は、System.Math の SetExceptionMask を次のオプションを付けて、アプリケーションのメイン ソース ブロックに対して呼び出します(通常、DPR ファイル)。
System.math.SetExceptionMask( [exPrecision, exUnderflow, exDenormalized]); // Enable exInvalidOp, exZeroDivide, and exOverflow exceptions
例:
uses
System.Math, // Add System.Math unit
<span class="glossaryTerm">Vcl<span class="tooltip"><p>Visual Component Library</p></span></span>.Forms,
Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
begin
System.math.SetExceptionMask( [exPrecision, exUnderflow, exDenormalized]); // Add this line.
Application.Initialize;.