In C++ pow(0, 0)の結果は基本的に実装定義の動作です。これは、数学的に常にあるべきであるが、常にあるべきであるという矛盾した状況があるためN^0
です。このWolfram Alphaフォーラムの投稿では、もう少し詳しく説明しています。1
0^N
0
N > 0
IEC 60559 浮動小数点演算サポートをカバーするセクションで、国際標準 — プログラミング言語— C の根拠pow(0,0)
として次のように、結果を持つこと1
は多くのアプリケーションに役立ちます。
一般に、C99 は、数値が有用な NaN の結果を避けます。[...] pow(∞,0) と pow(0,0) の結果は両方とも 1 です。これは、この定義を利用できるアプリケーションがあるためです。たとえば、x(p) と y(p) が p = a でゼロになる分析関数である場合、p が近づくにつれて exp(y*log(x)) に等しい pow(x,y) は 1 に近づきます。を。
C++ を更新する
leemes が正しく指摘したように、私は最初にpowの複雑なバージョンのリファレンスにリンクしましたが、非複雑なバージョンはそれがドメイン エラーであると主張していますが、ドラフト C++ 標準はドラフトC標準にフォールバックし、セクションpow 関数の段落でC99とC11の両方を使用します。 2は言います(私の強調):7.12.7.4
[...] x がゼロで y がゼロの場合、ドメイン エラーが発生することがあります。[...]
私が知る限り、この動作は未定義の動作であることを意味しますビットセクションを巻き戻す7.12.1
エラー状態の扱いは次のとおりです。
[...]入力引数が、数学関数が定義されているドメインの外にある場合、ドメイン エラーが発生します。[...] ドメイン エラーでは、関数は実装定義の値を返します。整数式 math_errhandling & MATH_ERRNO がゼロ以外の場合、整数式 errno は値 EDOM を取得します。[...]
したがって、ドメイン エラーがあった場合、これは実装定義の動作になりますが、 の最新バージョンgcc
とclang
の値の両方で、これらのコンパイラのドメイン エラーerrno
では0
ありません。
Javascript を更新する
Javascriptの場合、セクションThe Math Object under pow (x, y)のECMAScript® Language Specificationは、他の条件の中で次のように述べています。15.8
15.8.2.13
y が +0 の場合、x が NaN であっても結果は 1 になります。