is_infinite()
Aprende a usar la función is_infinite() en PHP para determinar si un valor de punto flotante es infinito (INF o -INF).
La función is_infinite() en PHP comprueba si un valor de punto flotante es infinito, es decir, igual a INF (infinito positivo) o -INF (infinito negativo). Esta página explica qué se considera "infinito", cómo se comporta la función y las situaciones prácticas en las que la utilizarías.
Sintaxis y valor de retorno
is_infinite(float $num): bool$num— el valor a comprobar.- Devuelve
truesi$numesINFo-INF, yfalsepara cualquier otro valor, incluidos números finitos ordinarios yNAN(Not a Number).
is_infinite() solo tiene sentido para valores float. Los enteros nunca pueden ser infinitos en PHP, por lo que la función siempre devuelve false para ellos.
¿De dónde vienen los valores infinitos?
En PHP, los números de punto flotante siguen el estándar IEEE 754, que tiene valores especiales para el infinito. Obtienes INF o -INF cuando:
- Usas la constante predefinida directamente:
$x = INF; - Un cálculo desborda el rango de un float (aproximadamente
±1.8e308):1.0e308 * 10se convierte enINF. - Se produce una división por cero de punto flotante, o una función como
log(0)devuelve infinito negativo.
Dado que estos valores se propagan silenciosamente en operaciones matemáticas posteriores (INF + 1 sigue siendo INF), comprobarlos es la forma de detectar un cálculo que ha salido del rango.
Uso básico
Aquí asignamos la constante INF a $number y luego llamamos a is_infinite() para comprobarlo. La condición es verdadera, por lo que el script imprime The number is infinite.
Qué es y qué no es infinito
La tabla de valores a continuación muestra exactamente qué devuelve is_infinite(). Ten en cuenta que el desbordamiento produce INF, mientras que un número grande pero representable no:
<?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
?>El punto clave a tener en cuenta: NAN (el resultado de operaciones como sqrt(-1)) no es infinito, por lo que is_infinite(NAN) es false. Usa is_nan() para detectar ese caso, e is_finite() para confirmar que un valor es un número ordinario y utilizable.
Un ejemplo práctico: protegerse contra el desbordamiento
Un uso habitual en el mundo real es validar el resultado de un cálculo antes de almacenarlo o mostrarlo. Si una operación ha desbordado hasta INF, tu código puede reaccionar en lugar de propagar el infinito:
<?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 sí mismo supera el rango del float, por lo que el producto es INF y la guardia lo detecta. La segunda llamada devuelve un valor normal.
is_infinite() frente a funciones relacionadas
PHP agrupa varios ayudantes para inspección de floats. Elige el que corresponda a la pregunta que estás formulando:
is_infinite()— ¿el valor esINFo-INF?is_finite()— ¿el valor es un número normal y finito (niINF, ni-INF, niNAN)?is_nan()— ¿el valor esNAN?is_float()— ¿la variable es de tipo float?
Para más funciones numéricas, consulta la referencia de PHP Math.
Conclusión
is_infinite() devuelve true únicamente para INF y -INF, lo que permite detectar desbordamientos de punto flotante y otras operaciones que producen infinito. Combínala con is_finite() e is_nan() para validar completamente el resultado de cualquier cálculo con floats antes de utilizarlo.