is_infinite()
Aprenda sobre a função is_infinite() no PHP, usada para verificar se um valor de ponto flutuante é infinito (INF ou -INF).
A função is_infinite() no PHP verifica se um valor de ponto flutuante é infinito — ou seja, igual a INF (infinito positivo) ou -INF (infinito negativo). Esta página explica o que é considerado "infinito", como a função se comporta e as situações práticas em que você precisaria dela.
Sintaxe e valor de retorno
is_infinite(float $num): bool$num— o valor a ser testado.- Retorna
truese$numforINFou-INF, efalsepara qualquer outro valor, incluindo números finitos regulares eNAN(Not a Number).
is_infinite() faz sentido apenas para floats. Inteiros nunca podem ser infinitos em PHP, portanto a função sempre retorna false para eles.
De onde vêm os valores infinitos?
Em PHP, os números de ponto flutuante seguem o padrão IEEE 754, que possui valores especiais para infinito. Você obtém INF ou -INF quando:
- Você usa a constante predefinida diretamente:
$x = INF; - Um cálculo transborda o intervalo de um float (aproximadamente
±1.8e308):1.0e308 * 10torna-seINF. - Ocorre uma divisão por zero de ponto flutuante, ou uma função como
log(0)retorna infinito negativo.
Como esses valores se propagam silenciosamente por cálculos posteriores (INF + 1 ainda é INF), verificá-los é a forma de detectar um cálculo que saiu do intervalo.
Uso básico
Aqui atribuímos a constante INF a $number, depois chamamos is_infinite() para testá-la. A condição é verdadeira, portanto o script imprime The number is infinite.
O que é e o que não é infinito
A tabela de valores abaixo mostra exatamente o que is_infinite() retorna. Observe que o transbordamento produz INF, enquanto um número grande mas representável não:
<?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
?>O principal ponto de atenção: NAN (o resultado de operações como sqrt(-1)) não é infinito, portanto is_infinite(NAN) é false. Use is_nan() para detectar esse caso, e is_finite() para confirmar que um valor é um número comum e utilizável.
Um exemplo prático: proteção contra transbordamento
Um uso real comum é validar o resultado de um cálculo antes de armazená-lo ou exibi-lo. Se uma operação transbordou para INF, seu código pode reagir em vez de propagar infinito adiante:
<?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
?>Multiplicar 1.0e200 por si mesmo excede o intervalo de float, portanto o produto é INF e a proteção o captura. A segunda chamada retorna um valor normal.
is_infinite() vs. funções relacionadas
O PHP agrupa vários auxiliares de inspeção de floats. Escolha o que corresponde à pergunta que você está fazendo:
is_infinite()— o valor éINFou-INF?is_finite()— o valor é um número normal e finito (nãoINF,-INFouNAN)?is_nan()— o valor éNAN?is_float()— a variável é do tipo float?
Para mais auxiliares numéricos, consulte a referência de matemática PHP.
Conclusão
is_infinite() retorna true apenas para INF e -INF, permitindo detectar transbordamento de ponto flutuante e outras operações que produzem infinito. Use-a em conjunto com is_finite() e is_nan() para validar completamente o resultado de qualquer cálculo com float antes de confiar nele.