英語版
このページの英語版を見る
std.math.hardware
これは std.math.
浮動小数点数のハードウェア・サポートが含まれている。
License:
Authors:
Walter Bright, Don Clugston,
Conversion of CEPHES math library to D by Iain Buclaw and David Nadlinger
- struct
IeeeFlags
; - IEEE例外ステータスフラグ(「スティッキービット)これらのフラグは、例外的な浮動小数点数の状態が発生したことを示す。 NaNまたは無限大が生成されたこと、結果が不正確であること、またはNaNが発生したことを示す。 が不正確であること、NaN が発生したことを示す。浮動小数点 浮動小数点例外が有効になっている(マスクされていない)場合は、これらのフラグを設定する代わ りにハードウェア例外が発生する。 が発生する。Examples:
import std.math.traits : isNaN; static void func() { int a = 10 * 10; } real a = 3.5; // すべてのフラグをゼロにする resetIeeeFlags(); assert(!ieeeFlags.divByZero); // ゼロによる除算を実行する。 a /= 0.0L; writeln(a); // real.infinity assert(ieeeFlags.divByZero); // NaNを作成する a *= 0.0L; assert(ieeeFlags.invalid); assert(isNaN(a)); // func()を呼び出してもステータスフラグに // 影響がないことを確認する。 IeeeFlags f = ieeeFlags; func(); writeln(ieeeFlags); // f
- const nothrow @nogc @property @safe bool
inexact
(); - 結果を正確に表すことができないため、四捨五入が行われた。
例: x = sin(0.1);
- const nothrow @nogc @property @safe bool
underflow
(); - アンダーフローによりゼロが発生した
例: ゼロが発生した。 x = real.min*real.epsilon/2;
- const nothrow @nogc @property @safe bool
overflow
(); - オーバーフローにより無限大が生成された
"例: x = real.max*2;
- const nothrow @nogc @property @safe bool
divByZero
(); - ゼロによる除算で無限大が発生した
"例: x = 3/0.0;
- const nothrow @nogc @property @safe bool
invalid
(); - マシンNaNが生成された。
例: x = real.infinity * 0.0;
- nothrow @nogc @trusted void
resetIeeeFlags
(); - すべての浮動小数点ステータス・フラグを false に設定する。Examples:
resetIeeeFlags(); real a = 3.5; a /= 0.0L; writeln(a); // real.infinity assert(ieeeFlags.divByZero); resetIeeeFlags(); assert(!ieeeFlags.divByZero);
- pure nothrow @nogc @property @trusted IeeeFlags
ieeeFlags
(); - Returns:浮動小数点ステータスフラグの現在の状態のスナップショットExamples:
import std.math.traits : isNaN; resetIeeeFlags(); real a = 3.5; a /= 0.0L; writeln(a); // real.infinity assert(ieeeFlags.divByZero); a *= 0.0L; assert(isNaN(a)); assert(ieeeFlags.invalid);
- struct
FloatingPointControl
; - 浮動小数点ハードウェアを制御するIEEE754浮動小数点丸めモードと浮動小数点ハードウェア例外を変更する。 ハードウェア例外を変更する。 デフォルトでは、丸めモードは roundToNearest であり、すべてのハードウェア例外は無効になっている。 は無効になっている。ほとんどのアプリケーションでは、ゼロによる除算、オーバーフロー、および無効な演算の例外を有効にすると、デバッグが容易になる。 ゼロによる除算、オーバーフロー、および無効な演算の例外が有効になっていると、ほとんどのアプリケーションでデバッグが容易になる。 これらの3つは、便宜上severeExceptions値にまとめられている。 特に、invalidExceptionが有効になっていると、未初期化のたびにハードウェア・トラップが生成されることに注意されたい。 が生成されることに注意すること。 すべての変更は一時的なものである。スコープが終了すると、以前の状態に戻る。 スコープの終わりで元に戻る。
"例
{ FloatingPointControl fpctrl; // ゼロによる除算、無限大へのオーバーフロー、 // 無効な演算、および初期化されていない浮動小数点変数に対するハードウェア例外を有効にする。 fpctrl.enableExceptions(FloatingPointControl.severeExceptions); // xがデフォルトで初期化された浮動小数点変数の場合、 // ハードウェア例外が発生する: real x; // 例外をスローしないためには、`= 0`または`= real.nan`を追加する。 real y = x * 3.0; // 例外はデフォルトで初期化されていないNaNに対してのみスローされる。 // 他のペイロードを持つNaNは有効である: real z = y * real.nan; // ok // このスコープを離れると、 // 設定されたハードウェア例外と丸めモードは無効になる。 }
Examples:import std.math.rounding : lrint; FloatingPointControl fpctrl; fpctrl.rounding = FloatingPointControl.roundDown; writeln(lrint(1.5)); // 1.0 fpctrl.rounding = FloatingPointControl.roundUp; writeln(lrint(1.4)); // 2.0 fpctrl.rounding = FloatingPointControl.roundToNearest; writeln(lrint(1.5)); // 2.0
- alias
RoundingMode
= uint; roundToNearest
roundDown
roundUp
roundToZero
roundingMask
- IEEEの丸めモード。 デフォルトは roundToNearest である。roundingMask = すべての丸めモードのマスク。
- nothrow @nogc @property @trusted void
rounding
(RoundingModenewMode
); - 浮動小数点ハードウェア丸めモードを変更する関数の途中で丸めモードを変更すると、浮動小数点式の最適化を妨げることがある。 オプティマイザは丸めモードが変更されないと仮定するからだ。 オプティマイザは丸めモードが変更されないと仮定するからである。 丸めモードを変更するのは、関数の最初だけにしておくのがよい。 丸めモードは関数の最初だけ変更し、関数が戻るまでそのままにしておくのがよい。 また、次の行を追加するのがベストである:
pragma(inline, false);
という行を関数の先頭行に追加し、インライン化されないようにする。Parameters:RoundingMode newMode
新しい丸めモード - static pure nothrow @nogc @property @trusted RoundingMode
rounding
(); - Returns:現在有効な丸めモード
- alias
ExceptionMask
= uint; subnormalException
inexactException
underflowException
overflowException
divByZeroException
invalidException
severeExceptions
allExceptions
- IEEEのハードウェア例外。 デフォルトでは、すべての例外はマスクされている(@disable)。severeExceptions = オーバーフロー、ゼロによる除算、および無効な 例外である。
- static pure nothrow @nogc @property @safe bool
hasExceptionTraps
(); - Returns:現在の FPU が例外のトラッピングをサポートしている場合は true を指定する。
- nothrow @nogc @trusted void
enableExceptions
(ExceptionMaskexceptions
); - 特定のハードウェア例外を有効にする(マスクを解除する)。複数の例外を OR することができる。
- nothrow @nogc @trusted void
disableExceptions
(ExceptionMaskexceptions
); - 特定のハードウェア例外を無効にする(マスクする)。複数の例外が OR される可能性がある。
- static pure nothrow @nogc @property @trusted ExceptionMask
enabledExceptions
(); - Returns:現在有効になっている(マスクされていない)例外。
Copyright © 1999-2024 by the D Language Foundation
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku