W3docs

is_infinite()

La funzione is_infinite() in PHP controlla se un valore float è infinito, ovvero uguale a INF o -INF.

La funzione is_infinite() in PHP controlla se un valore in virgola mobile è infinito — cioè uguale a INF (infinito positivo) o -INF (infinito negativo). Questa pagina spiega cosa si intende per "infinito", come si comporta la funzione e le situazioni pratiche in cui è utile utilizzarla.

Sintassi e valore restituito

is_infinite(float $num): bool
  • $num — il valore da verificare.
  • Restituisce true se $num è INF o -INF, e false per qualsiasi altro valore, inclusi i numeri finiti normali e NAN (Not a Number).

is_infinite() ha senso solo per i float. In PHP i numeri interi non possono mai essere infiniti, quindi la funzione restituisce sempre false per essi.

Da dove provengono i valori infiniti?

In PHP, i numeri in virgola mobile seguono lo standard IEEE 754, che prevede valori speciali per l'infinito. Si ottiene INF o -INF quando:

  • Si usa direttamente la costante predefinita: $x = INF;
  • Un calcolo va in overflow rispetto all'intervallo di un float (approssimativamente ±1.8e308): 1.0e308 * 10 diventa INF.
  • Si verifica una divisione per zero in virgola mobile, oppure una funzione come log(0) restituisce infinito negativo.

Poiché questi valori si propagano silenziosamente nei calcoli successivi (INF + 1 è ancora INF), verificarli è il modo per individuare un calcolo andato fuori intervallo.

Utilizzo di base

php— editable, runs on the server

Qui assegniamo la costante INF a $number, poi chiamiamo is_infinite() per verificarla. La condizione è vera, quindi lo script stampa The number is infinite.

Cosa è e cosa non è infinito

La tabella dei valori sottostante mostra esattamente cosa restituisce is_infinite(). Si noti che l'overflow produce INF, mentre un numero grande ma rappresentabile non lo fa:

<?php
var_dump(is_infinite(INF));               // bool(true)
var_dump(is_infinite(-INF));              // bool(true)
var_dump(is_infinite(PHP_FLOAT_MAX * 2)); // bool(true)  — overflow
var_dump(is_infinite(1 / 0.0001));        // bool(false) — large but finite
var_dump(is_infinite(42));                // bool(false) — an integer
var_dump(is_infinite(NAN));               // bool(false) — NAN is not infinite
?>

Il punto critico: NAN (il risultato di operazioni come sqrt(-1)) non è infinito, quindi is_infinite(NAN) è false. Usa is_nan() per rilevare quel caso, e is_finite() per confermare che un valore è un numero ordinario e utilizzabile.

Un esempio pratico: protezione dall'overflow

Un utilizzo comune nel mondo reale è la validazione del risultato di un calcolo prima di salvarlo o visualizzarlo. Se un'operazione è andata in overflow producendo INF, il codice può reagire invece di propagare l'infinito a valle:

<?php
function guardedMultiply(float $a, float $b): string
{
    $product = $a * $b;

    return is_infinite($product)
        ? "Result overflowed to infinity"
        : "Result: $product";
}

echo guardedMultiply(1.0e200, 1.0e200), PHP_EOL; // Result overflowed to infinity
echo guardedMultiply(2, 3), PHP_EOL;             // Result: 6
?>

Moltiplicare 1.0e200 per se stesso supera l'intervallo dei float, quindi il prodotto è INF e il controllo lo intercetta. La seconda chiamata restituisce un valore normale.

is_infinite() rispetto alle funzioni correlate

PHP raggruppa diversi helper per l'ispezione dei float. Scegli quello che corrisponde alla domanda che stai ponendo:

Per altri helper numerici, consulta il riferimento PHP Math.

Conclusione

is_infinite() restituisce true solo per INF e -INF, permettendoti di rilevare l'overflow in virgola mobile e altre operazioni che producono infinito. Abbinala a is_finite() e is_nan() per validare completamente il risultato di qualsiasi calcolo con float prima di utilizzarlo.

Esercizio

Pratica
Qual è lo scopo della funzione 'is_infinite()' in PHP?
Qual è lo scopo della funzione 'is_infinite()' in PHP?
Was this page helpful?