Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】is_infinite()関数の使い方

is_infinite関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

is_infinite関数は、与えられた浮動小数点数が無限大であるかどうかを判定する関数です。この関数は、数値が正の無限大(+INF)または負の無限大(-INF)に達しているかを調べます。

浮動小数点数の計算では、非常に大きな数や特定の数学演算の結果として、通常の数値の範囲を超え、無限大という特殊な値になることがあります。例えば、特定の数学関数で定義域外の値を扱う場合や、非常に大きな数を計算した結果として無限大が発生するケースがあります。このような無限大の値は、プログラムの予期せぬ挙動や計算結果の異常を示すことがあるため、その状態を正確に把握することが重要です。

is_infinite関数は、引数として検査したい浮動小数点数(float型)を一つ受け取ります。そして、もしその数値が無限大であると判定されればtrue(真)を返し、有限な数値やNaN(非数、Not a Number)であればfalse(偽)を返します。

この関数を利用することで、計算結果が無限大になっていないかを確認し、もし無限大であれば適切なエラー処理を行ったり、計算方法を調整したりするなど、プログラムの信頼性を向上させることができます。特に、科学技術計算や金融計算など、浮動小数点数を用いた厳密な計算が求められる場面で役立ちます。

構文(syntax)

1<?php
2$value = INF; // 無限大を表す浮動小数点数
3$result = is_infinite($value);
4var_dump($result); // true が出力される
5?>

引数(parameters)

float $num

  • float $num: 無限大かどうかを判定したい浮動小数点数

戻り値(return)

bool

引数で渡された数値が無限大(正または負の無限大)である場合に true を、それ以外の場合に false を返します。

サンプルコード

PHP is_infinite で浮動小数点数の無限大を判定する

1<?php
2
3/**
4 * 浮動小数点数が無限大(正または負)であるかをチェックする `is_infinite` 関数の使用例です。
5 *
6 * この関数は、`float $num` 引数で渡された数値が PHP の浮動小数点数の無限大表現
7 * (PHP_FLOAT_INF またはその負の値) に相当するかどうかを真偽値で返します。
8 *
9 * @param float $number 検査する浮動小数点数。
10 * @return void
11 */
12function demonstrateIsInfiniteUsage(float $number): void
13{
14    echo "数値: " . $number;
15    if (is_infinite($number)) {
16        echo " -> 無限大です。\n";
17    } else {
18        echo " -> 無限大ではありません。\n";
19    }
20}
21
22// 例1: 正の無限大 (PHP_FLOAT_INF)
23// PHP_FLOAT_INF は、PHPで表現できる最大の浮動小数点数を超える値を表します。
24demonstrateIsInfiniteUsage(PHP_FLOAT_INF);
25
26// 例2: 負の無限大
27// 負の無限大は、PHP_FLOAT_INF に負の符号を付けることで表現できます。
28demonstrateIsInfiniteUsage(-PHP_FLOAT_INF);
29
30// 例3: 通常の浮動小数点数
31// 無限大ではない一般的な数値です。
32demonstrateIsInfiniteUsage(123.45);
33
34// 例4: ゼロ
35// ゼロも無限大ではありません。
36demonstrateIsInfiniteUsage(0.0);
37
38// 例5: PHPが表現できる最大の浮動小数点数
39// これは無限大ではありません。
40demonstrateIsInfiniteUsage(PHP_FLOAT_MAX);
41
42// 例6: 非数 (NaN - Not a Number)
43// `is_infinite` は NaN に対しては false を返します。
44// NaNは、無効な数学的操作(例: acos(8))の結果として生成されます。
45$nanValue = acos(8);
46echo "数値: " . $nanValue . " (NaN)";
47if (is_infinite($nanValue)) {
48    echo " -> 無限大です。\n";
49} else {
50    echo " -> 無限大ではありません。\n";
51}
52echo "\n";
53
54?>

PHP 8のis_infinite関数は、与えられた浮動小数点数が無限大(正または負)であるかを判定するために使用されます。この関数は、検査したい浮動小数点数$numを引数として受け取ります。戻り値はブール型で、引数が無限大であればtrueを、そうでなければfalseを返します。

サンプルコードでは、様々な値でis_infinite関数の挙動を確認できます。PHP_FLOAT_INFはPHPが表現する正の無限大を表し、その負の値は負の無限大です。これらに対してis_infinitetrueを返します。一方で、123.45のような通常の浮動小数点数、0.0、そしてPHPが表現できる最大の浮動小数点数であるPHP_FLOAT_MAXは無限大ではないため、falseが返されます。また、acos(8)のような無効な数学演算の結果として生成される非数(NaN: Not a Number)も無限大とはみなされず、is_infinitefalseを返します。この関数は、浮動小数点数を用いた複雑な計算において、結果が無限大になった場合の処理を適切に分岐するために役立ちます。

is_infinite関数は、数値が正または負の無限大であるかのみを判定するものです。引数には必ずfloat型の値を渡してください。他の型の値を渡すと内部的に型変換されますが、予期せぬ挙動を避けるためにも、明示的にfloatを扱うことを推奨します。特に注意すべき点は、is_infiniteが**非数(NaN)**に対してはfalseを返すことです。NaNの判定にはis_nan()関数を別途使用する必要があります。無限大はPHP_FLOAT_INF定数で表現できるほか、0での除算など特定の計算結果として発生する場合があるため、コード中で予期せぬ無限大が発生していないか確認することも重要です。

PHPで無限大・NaNを判定する

1<?php
2
3/**
4 * 浮動小数点数が無限大(Infinity)または非数(NaN)であるかを判定するサンプルコードです。
5 *
6 * PHPのis_infinite()関数は、与えられた数値が正または負の無限大である場合にtrueを返します。
7 * is_nan()関数は、与えられた数値が「非数」(Not a Number)である場合にtrueを返します。
8 * これらの関数は、浮動小数点数の計算で予期せぬ結果が発生した場合のエラーハンドリングに役立ちます。
9 */
10function demonstrateSpecialFloatChecks(): void
11{
12    echo "--- is_infinite() の使用例 ---\n";
13
14    // 正の無限大を生成する例 (0による除算)
15    $positiveInfinity = log(0); // PHP 8では `INF` となる
16    echo "log(0) の結果: " . var_export($positiveInfinity, true) . "\n";
17    echo "is_infinite(log(0)) の結果: " . (is_infinite($positiveInfinity) ? 'true' : 'false') . "\n\n";
18
19    // 負の無限大を生成する例
20    $negativeInfinity = -log(0); // PHP 8では `-INF` となる
21    echo "-log(0) の結果: " . var_export($negativeInfinity, true) . "\n";
22    echo "is_infinite(-log(0)) の結果: " . (is_infinite($negativeInfinity) ? 'true' : 'false') . "\n\n";
23
24    // 通常の浮動小数点数
25    $normalNumber = 123.45;
26    echo "is_infinite(123.45) の結果: " . (is_infinite($normalNumber) ? 'true' : 'false') . "\n\n";
27
28    // 整数の場合
29    $integerNumber = 100;
30    echo "is_infinite(100) の結果: " . (is_infinite($integerNumber) ? 'true' : 'false') . "\n\n";
31
32
33    echo "--- is_nan() の使用例 ---\n";
34
35    // 非数(NaN)を生成する例 (不正な数学演算)
36    $nanValue = acos(8); // domain error
37    echo "acos(8) の結果: " . var_export($nanValue, true) . "\n";
38    echo "is_nan(acos(8)) の結果: " . (is_nan($nanValue) ? 'true' : 'false') . "\n\n";
39
40    // 0を0で割る場合 (PHP 8では `NAN` となる)
41    $nanDivideByZero = 0 / 0;
42    echo "0 / 0 の結果: " . var_export($nanDivideByZero, true) . "\n";
43    echo "is_nan(0 / 0) の結果: " . (is_nan($nanDivideByZero) ? 'true' : 'false') . "\n\n";
44
45    // 無限大の値をis_nan()でチェック
46    echo "is_nan(log(0)) の結果: " . (is_nan($positiveInfinity) ? 'true' : 'false') . "\n\n";
47
48    // 通常の浮動小数点数
49    echo "is_nan(123.45) の結果: " . (is_nan($normalNumber) ? 'true' : 'false') . "\n\n";
50}
51
52// 関数の実行
53demonstrateSpecialFloatChecks();
54
55?>

PHPでは、浮動小数点数の計算において、特殊な結果として「無限大」(Infinity)や「非数」(Not a Number, NaN)が発生することがあります。このような特殊な状態を適切に処理するために、is_infinite()関数とis_nan()関数が提供されています。

is_infinite()関数は、引数として与えられた浮動小数点数が、正または負の無限大であるかを判定します。引数float $numに検査したい数値を指定すると、無限大であればtrue、それ以外であればfalseを真偽値(bool)として返します。例えば、log(0)のように数学的に無限大となる演算結果を検出する際に使用します。

一方、is_nan()関数は、引数として与えられた浮動小数点数が「非数」(NaN)であるかを判定します。こちらも引数float $numに検査したい数値を指定し、非数であればtrue、そうでなければfalseを真偽値で返します。例えば、acos(8)のように数学的に定義できない演算結果や、0 / 0のような不定な結果を検出する際に役立ちます。

これらの関数は、浮動小数点数を使ったプログラムの計算で、予期せぬ無限大や非数が発生した場合に、適切なエラー処理やプログラムの挙動制御を行うために非常に重要です。

PHPの浮動小数点数には、通常の数値以外に「無限大(INF)」や「非数(NaN)」といった特殊な値が存在することを理解することが重要です。これらは特定の数学演算、例えば0による除算や定義域外の関数計算などで発生します。これらの特殊な値は、通常の数値比較(==など)では正しく判定できない場合があるため、is_infinite()関数とis_nan()関数を使い明示的にチェックする必要があります。特にNaNは、それ自体を含むいかなる値とも等しくないという特性を持ちます。これらの関数を適切に利用することで、浮動小数点数計算の結果が予期せぬ特殊な値になった際の適切なエラーハンドリングが可能となり、プログラムの安定性を高めることができます。引数には浮動小数点数を渡してください。

関連コンテンツ

関連プログラミング言語