2011-09-05 15 views
21

¿Alguien conocería el método para probar si un doble (o entero) es infinito, por ejemplo cuando se realiza la operación 1/0?Verificar inf - objetivo c

isfinite (n) parece que no funciona.

+7

Un número entero no puede ser infinito. –

+0

Puedes probar 'x * 2 == x && x! = 0' o algo así ... Para NaN puedes probar' x! = X'. –

+2

¿Puedes aclarar a qué te refieres con "' isfinite() 'no parece funcionar"? –

Respuesta

36

Es posible comprobar

if(d == INFINITY) {} 

o

if(d > DBL_MAX) {} 

INFINITY es una expresión de flotación constante definida en math.h representa el infinito positivo;
DBL_MAX es una constante definida en float.h que representa el doble más grande que se puede representar.

Check también here

+0

Probablemente deba describir de dónde vienen esos símbolos para que esta respuesta sea útil. –

+0

if (d == INFINITY) funciona de maravilla, gracias – John67

+1

@Kerrek SB: información que falta – Saphrosit

17

<math.h> tiene una macro, isinf, definido para comprobar el tamaño de su argumento y luego llamar a la función apropiada __isinf para el tipo:

#define isinf(x) \ 
     ( sizeof (x) == sizeof(float) ? __isinff((float)(x)) \ 
     : sizeof (x) == sizeof(double) ? __isinfd((double)(x)) \ 
              : __isinf ((long double)(x))) 

La macro es lo mismo en arquitectura/i386/math.h y architecture/arm/math.h; las implementaciones de las funciones presumiblemente difieren.

Esto devolverá cierto para el infinito negativo así como positivo, en caso de que suceda a encontrar tal cosa:

2011-10-26 18: 41: 53.424 ToInfinityEtc [30197: 903] Sí de verdad!
2011-10-26 18: 41: 53.426 ToInfinityEtc [30197: 903] ¡Usted betcha!

+0

pero isinf es solo para el compilador de GNU. no es compatible con llvm. xcode dice "uso de identificador undeclerated isinf", aunque el indicador + clic navega a cmath.I importó math.h manualmente. pero aún navega a cmath y sí no puede compilarse debido a este error "uso de identificador undeclerated isinf". finalmente reemplacé std :: isinf en lugar de isinf ahora compilado. –

+1

math.h y 'isinf()' [son ambos parte del estándar POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/math.h.html), @N.Ramos. No tienen nada que ver con GCC. Tienes otro problema en alguna parte. –