関数定義における NaN
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/06 03:43 UTC 版)
数値関数が入力として NaN を受け取ったとき、どう処理すべきかについては様々な意見がある。1つの見方は、NaN はエラーを示すものとして常に出力に伝播させなければならないというものである。別の見方として、その関数に複数の引数があり、NaN でない引数だけで出力値が決定される場合、その値を返すべきだという考え方もある。IEEE 754 は主に後者の立場で策定されている。例えば、hypot(±∞, qNaN) と hypot(qNaN, ±∞) は +∞ を返す。 例えば冪乗関数 pow(x,y) = x ** y という関数を考えてみよう。00、∞0、1∞ といった式は極限を考えると(∞ × 0 などと同様)不定形(英語版)だが、0の0乗は1と定義すべきだという意見もある。 引数が未定義なら結果も未定義とする場合、pow(1,qNaN) は qNaN を出力すべきである。しかし、一般的な数学ライブラリでは pow(1,y) は任意の実数 y について常に 1 を返す。これは y が無限大であっても同様である。同様に pow(x,0) は x が 0 や無限大であっても 1 を返す。本来不定形であるはずなのに 1 を返す論理的根拠は、ロピタルの定理である。IEEE 754-2008 では、pow(1,qNaN) と pow(qNaN,0) はどちらも 1 を返すべきだとされている。 冪乗関数がより厳密な解釈に従うべきだという立場を考慮し、IEEE 754-2008 では他に2つの冪乗関数を定義している。pown(x, n) は冪指数として整数しか指定できない。powr(x, y) は引数のいずれかが NaN の場合や計算結果が不定形になる場合、常に NaN を返す。
※この「関数定義における NaN」の解説は、「NaN」の解説の一部です。
「関数定義における NaN」を含む「NaN」の記事については、「NaN」の概要を参照ください。
- 関数定義における NaNのページへのリンク