11


4

C言語では、 'ドメインエラー'、std

domain_errorの基本クラスがあります。 どのような状況下でコードにドメインエラーが発生するのか理解できません。 他のすべての例外基底クラスは一目瞭然です。 std :: domain_errorそれ自体がインターネットのドメイン名とは無関係であることは間違いないので、ドメインエラーがどのクラスのエラーであるかを説明し、いくつかの例を示してください。

7 Answer


12


ドメイン誤差と範囲誤差は両方とも数学関数を扱うときに使われます。

一方では、関数の定義域は、その関数によって受け入れられることができる値の集合です。 たとえば、二乗平方根関数の定義域は、正の実数の集合です。 したがって、関数の引数がそのドメインに含まれていない場合、http://en.cppreference.com/w/cpp/error/domain_error [domain_error]例外がスローされます。

一方、関数の範囲は、その関数が返すことができる値の集合です。 たとえば、次のような関数の範囲は、

f(x) = -x²

負の実数の集合です。 それで `range_error`のポイントは何ですか? 関数の引数がそのドメイン内にある場合、結果はその範囲内になければならないので、範囲内にエラーがあってはなりません。 たとえば、Cでは、戻り値の大きさが大きすぎる(または小さすぎる)場合、 ``の関数はエラーを生成します。


6


ドメインエラーは関数の数学的ドメインに関する問題を表します。 関数は特定の値に対してのみ定義されることがあります。 そのドメインの一部ではない引数を使用してそのような関数を呼び出そうとすると、それはドメインエラーです。

例えば、負の数を指定して `sqrt()`を呼び出そうとすると、ドメインエラーとなります。負の数は `sqrt()`のドメインの一部ではないからです。


2


「ドメイン」エラーのクラスの論理エラー用です。 これは、機能への入力が、機能するために許容されるドメインを超えるような状況にも当てはまります。 それが規格で定められている目的です。

たとえば、正の浮動小数点のみを取る関数があるため、負の数に対してはdomain_errorがスローされます。


2


かなり良い説明フォームhttp://www.cplusplus.com/reference/std/stdexcept/domain_error.html[cplusplus.com]:

_ 一般的に、数学関数のドメインは、定義されている値のサブセットです。 たとえば、平方根関数は負でない数に対してのみ定義されています。 したがって、そのような関数の負の数はドメインエラーです。 _


2


これは、C標準から得られるすべてのガイダンスです。

_ クラスdomain_errorは、ドメインエラーを報告するために実装によって例外としてスローされるオブジェクトのタイプを定義します。 _

ここでドメインとは「問題ドメイン」を意味し、インターネットとは関係ありません。 たとえば、平方根関数は、負の数を渡すとドメインエラーをスローします。


1


それは数学領域を指します。

float MySqrRoot(float x){// sqrtは負数には無効です。 if(x <0)が新しいdomain_errorをスローします。

// ... }


1


「詳細な説明ライブラリによって、またはドメインエラー(数学的な意味でのドメイン)を報告するためにあなたによってスローされます。 "

これによれば、あなたがあなたのインターフェースに課した制約に従わない入力が与えられたなら、それは使われるべきです。 たとえば、正の値を受け取り、負の値が設定されている関数です。