1. ホーム
  2. javascript

[解決済み] Math.pow(0, 0) === 1はなぜですか?

2023-04-05 08:38:17

疑問点

私たちは皆、0 0 は不定です。

しかし , javascript がそう言っています。

Math.pow(0, 0) === 1 // true

C++ は同じことを言う。

pow(0, 0) == 1 // true

なぜ?

それはわかっています。

>Math.pow(0.001, 0.001)
0.9931160484209338

しかし、なぜ Math.pow(0, 0) はエラーを投げないのでしょうか?あるいは NaN よりも 1 .

どのように解決するのですか?

C++の場合 <ストライク pow(0, 0)の結果 という矛盾した状況になってしまうので、基本的には実装で定義された動作になります。 N^0 は常に 1 しかし 0^N は常に 0 に対して N > 0 というように、この結果についても数学的に期待しない方がよいでしょう。この ウルフラムアルファ フォーラムの投稿では、もう少し詳しく説明されています。

とはいえ pow(0,0) の結果は 1 は、多くのアプリケーションで 国際標準プログラミング言語-Cの根拠 をカバーするセクションで述べています。 IEC 60559 浮動小数点演算 をサポートしています。

一般的に、C99は数値が有用である場合、NaNの結果を敬遠します。[...] pow(∞,0) と pow(0,0) の結果は両方とも 1 で、この定義を利用できるアプリケーションがあるからです。例えば、x(p)とy(p)がp=aでゼロになる任意の解析的関数であれば、pow(x,y)はexp(y*log(x))に等しく、pがaに近づくと1に近づきます。

C++ を更新

leemes が正しく指摘したように、私は元々、リファレンスにリンクしている 複合体 のバージョンの ポー を実行中に 非複雑 バージョンでは ドメインエラー C++標準のドラフト にフォールバックします。 C 標準草案 C99 C11 セクションで 7.12.7.4 pow関数 パラグラフ 2 は言う ( 強調 ):

[...]ドメインエラー が発生する可能性があります。 xがゼロでyがゼロの場合[...]です。

というのは、私の知る限りでは、この動作は 未指定の動作 少し巻き戻した部分 7.12.1 エラー条件の扱い は言う。

[...]ドメインエラーは、入力引数が数学関数が定義されているドメインの外にある場合に発生します。 もし整数式 math_errhandling & MATH_ERRNO が0でなければ、整数式 errno は値 EDOM; [...] を獲得します。

ということは、もし ドメインエラー であれば、これは 実装で定義された動作 ということになりますが、最新版では gccclang の値は errno0 であるため ドメインエラー であるため、これらのコンパイラでは

ジャバスクリプトの更新

について ジャバスクリプト ECMAScript® 言語仕様 セクションで 15.8 Math オブジェクト の下に 15.8.2.13 pow (x, y) は、他の条件との間で次のように言っています。

yが+0なら、xがNaNでも結果は1です。