C ++でPOW(0、0)の結果、数学的に、我々は矛盾した状況があるので、結果は基本的には、実装定義された動作ですN^0
常にする必要があります1
が、0^N
常にあるべき0
ためにN > 0
あなたがいずれかの数学的にこの結果に関しては何の期待を持つべきではないのでが、。このWolframAlphaフォーラムの投稿では、もう少し詳しく説明します。
pow(0,0)
結果が得られることは、国際標準1
の理論的根拠-プログラミング言語-Cが、IEC 60559浮動小数点演算のサポートをカバーするセクションで述べているように、多くのアプリケーションに役立ちます。
一般に、C99は、数値が役立つNaN結果を避けます。[...] pow(∞、0)とpow(0,0)の結果は両方とも1です。これは、この定義を利用できるアプリケーションがあるためです。たとえば、x(p)とy(p)がp = aでゼロになる分析関数である場合、exp(y * log(x))に等しいpow(x、y)は、pが近づくにつれて1に近づきます。 a。
C ++を更新します
leemesが正しく指摘したように、私、もともとのための参照にリンクされている複雑なバージョンのPOWながら、非複雑なことがあるバージョンの主張ドメイン・エラードラフトC ++標準はにフォールバックドラフトCの標準との両方のC99とC11のセクションで7.12.7.4
POW関数段落2は言う(私の強調):
[...] xがゼロでyがゼロの場合、ドメインエラーが発生する可能性があります。[...]
私が知る限り、これはこの動作が不特定の動作であることを意味します。ビットセクションを巻き戻す7.12.1
エラー状態の処理は次のように述べています。
[...]入力引数が数学関数が定義されているドメインの外にある場合、ドメインエラーが発生します。[...]ドメインエラーの場合、関数は実装定義の値を返します。整数式math_errhandling&MATH_ERRNOがゼロ以外の場合、整数式errnoは値EDOMを取得します。[...]
あったのであれば、ドメイン・エラーこれは次のようになり、実装定義された行動が、最新バージョンの両方にgcc
とclang
の値errno
である0
ことはないので、ドメイン・エラーこれらのコンパイラのために。
Javascriptを更新する
Javascriptの場合、セクション「pow(x、y)の下の数学オブジェクト」のECMAScript®言語仕様は、他の条件の中で次のように述べています。15.8
15.8.2.13
yが+0の場合、xがNaNであっても、結果は1になります。