【PHP8.x】is_nan関数の使い方
is_nan関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
is_nan関数は、PHPにおいて与えられた浮動小数点数が「非数(NaN: Not a Number)」であるかどうかを検査する関数です。非数とは、数学的に定義できない結果、例えばゼロをゼロで割った場合や、負の数の平方根を求めた場合などに生じる特別な浮動小数点数の値です。
この関数は、引数として一つの浮動小数点数を受け取ります。もしその値が非数である場合はブール値のtrueを返し、非数ではない場合はfalseを返します。例えば、複雑な計算処理の中で予期せずNaNが発生した場合に、そのエラー状態を検出するために利用できます。
非数(NaN)は非常に特殊な性質を持っており、PHPを含む多くのプログラミング言語では、通常の比較演算子(==や===など)を使ってNaN自身と比較しても常にfalseとなります。これは、NaNが「自身と等しくない」という独自の特性を持つためです。したがって、浮動小数点数の値がNaNであるかどうかを正確に判断するには、このis_nan関数を使用することが不可欠です。
特に科学技術計算や統計処理など、浮動小数点数を用いた複雑な演算を行う際には、中間結果や最終結果が非数になっていないかを確認することが、プログラムの信頼性を高める上で非常に重要になります。この関数を利用することで、不正な計算結果を検出し、適切なエラーハンドリングを行うことが可能になります。
構文(syntax)
1<?php 2$val_nan = acos(2); // 数値計算の結果が "Not a Number" (NaN) となる例 3$val_number = 10.5; // 通常の数値の例 4 5var_dump(is_nan($val_nan)); 6var_dump(is_nan($val_number)); 7?>
引数(parameters)
float $num
- float $num: 浮動小数点数型で、NaN (Not a Number) かどうかを判定したい数値を指定します
戻り値(return)
bool
指定された値が「Not a Number」(非数)である場合に TRUE を、それ以外の場合に FALSE を返します。
サンプルコード
PHP is_nan関数でNaNを判定する
1<?php 2 3/** 4 * 指定された値が NaN (Not-a-Number) であるかどうかを判定する。 5 * 6 * @param float $num 判定する値 7 * @return bool NaN であれば true、そうでなければ false 8 */ 9function check_nan(float $num): bool 10{ 11 return is_nan($num); 12} 13 14// 使用例 15$nan_value = acos(8); // 定義域外の値を計算して NaN を生成 16$infinity_value = INF; 17$normal_value = 10.5; 18 19echo "NaN value: " . var_export(check_nan($nan_value), true) . PHP_EOL; // 出力: NaN value: true 20echo "Infinity value: " . var_export(check_nan($infinity_value), true) . PHP_EOL; // 出力: Infinity value: false 21echo "Normal value: " . var_export(check_nan($normal_value), true) . PHP_EOL; // 出力: Normal value: false
PHPのis_nan()関数は、与えられた数値が「NaN (Not a Number)」であるかどうかを判定するために使用されます。NaNとは、数値として表現できない値を指し、例えば、数学的に定義されていない演算の結果などが該当します。
この関数は、引数としてfloat型の数値 $num を受け取ります。is_nan($num) は、$num が NaN であれば true を、そうでなければ false を返します。
サンプルコードでは、check_nan() という関数を定義し、is_nan() 関数を利用して、与えられた数値が NaN であるかどうかを判定しています。acos(8) は、定義域外の値を計算するため、NaN を生成します。INF は無限大を表す定数です。
実行結果からわかるように、is_nan() 関数は、NaN に対してのみ true を返し、無限大や通常の数値に対しては false を返します。この関数は、数値計算の結果を検証し、予期せぬエラーを回避するために役立ちます。特に、ユーザーからの入力値を元に計算を行う場合など、入力値が数値として適切かどうかを検証する際に有効です。
is_nan()関数は、引数が数値ではない状態 (NaN) であるかを判定します。数学的な計算の結果が定義できない場合(例:acos(8))、NaN が生成されることがあります。
注意点として、PHPでは INF(無限大)は NaN ではありません。is_nan()は、あくまで「数として表現できない状態」をチェックするものです。
また、is_nan()は浮動小数点数 (float) に対してのみ意味があります。整数などの他の型で使用しても、意図した結果にならない可能性があります。
var_export()関数は、変数の内容をPHPコードとして出力するために使用しています。var_dump()よりもシンプルな出力が得られます。
PHP is_nanでNaNを判定する
1<?php 2 3/** 4 * Checks if a value is NaN (Not a Number). 5 * 6 * @param float $num The value to check. 7 * @return bool True if $num is NaN, false otherwise. 8 */ 9function check_nan(float $num): bool 10{ 11 return is_nan($num); 12} 13 14// Example usage: 15$nan_value = acos(8); // Generate a NaN value. 16$regular_number = 10.5; 17 18echo "Is NaN: " . (check_nan($nan_value) ? 'yes' : 'no') . PHP_EOL; 19echo "Is NaN: " . (check_nan($regular_number) ? 'yes' : 'no') . PHP_EOL;
PHPのis_nan()関数は、与えられた数値が「Not a Number (NaN)」であるかどうかを判定します。NaNとは、数値として表現できない値を表す特別な値で、例えば、定義域外の数学関数(例:負の数の平方根や、acos(8)のように絶対値が1より大きい数の逆余弦)の結果などがNaNとなります。
このサンプルコードでは、check_nan()という関数を定義し、is_nan()関数を利用して、引数として受け取った浮動小数点数 $num がNaNであるかどうかを判定しています。is_nan($num) は、$num がNaNの場合には true を、そうでない場合には false を返します。
サンプルコードでは、まず acos(8) を実行し、NaNとなる値を $nan_value に代入しています。次に、通常の浮動小数点数 10.5 を $regular_number に代入しています。そして、それぞれの変数に対して check_nan() 関数を呼び出し、結果をターナリー演算子 (condition ? value_if_true : value_if_false) を用いて "yes" または "no" の文字列に変換し、画面に出力しています。これにより、is_nan() 関数がNaN値を正しく判定できることを確認できます。この例では、$nan_value はNaNなので "Is NaN: yes" と出力され、 $regular_number は通常の数値なので "Is NaN: no" と出力されます。
is_nan()関数は、引数が数値ではない (Not a Number) かどうかを判定します。数学的なエラーが発生した場合などにNaNが生成されることがあります。acos(8)のように、定義域外の値を関数に与えるとNaNが返されることがあります。
PHPでは、数値として扱える文字列(例: "123")をis_nan()に渡してもfalseが返されます。is_nan()はあくまで浮動小数点数(float)に対してのみ意味のある関数であることに注意が必要です。整数の場合は常にfalseを返します。
また、is_null()と混同しないように注意してください。is_null()は変数がnullかどうかを判定する関数であり、NaNとは全く異なる概念です。is_nan()は数値が有効な数値かどうかをチェックするのに対し、is_null()は変数が値を持っているかどうかをチェックします。