error define c++ double infinity

c++ - define - Modelando el infinito para el mayor valor doble



inf c++ error (9)

¿No funcionaría esto?

const double infinity = 1.0/0.0;

La pregunta es sobre el modelado del infinito en C ++ para el tipo de datos double . Lo necesito en un archivo de encabezado, por lo que no podemos usar funciones como numeric_limits .

¿Hay una constante definida que representa el valor más grande?


DBL_MAX puede ser utilizado. Esto se encuentra en float.h como sigue

#define DBL_MAX 1.7976931348623158e+308 /* max value */


De Wikipedia :

0x 7ff0 0000 0000 0000 = Infinity 0x fff0 0000 0000 0000 = −Infinity


No estoy seguro de por qué no puedes usar std :: numeric_limits en un archivo de encabezado. Pero también hay esto transferido de ANSI C:

#include <cfloat> DBL_MAX




los números de punto flotante (como los dobles) pueden contener infinito positivo y negativo. La constante INFINITY debe estar en su encabezado math.h.

Se fue al buceo estándar y encontró el texto:

4 La macro INFINITY se expande a una expresión constante de tipo float que representa infinito positivo o sin signo, si está disponible; de lo contrario, a una constante positiva de tipo float que se desborda en el momento de la traducción.

En la Sección 7.12 Mathematics <math.h>

Luego, por supuesto, tiene la función de ayuda isinf para probar el infinito (que también está en math.h).

7.12.3.3 La macro isinf

int isinf (x flotante real);

Descripción: la macro isinf determina si el valor de su argumento es infinito (positivo o negativo). Primero, un argumento representado en un formato más amplio que su tipo semántico se convierte a su tipo semántico. Entonces la determinación se basa en el tipo de argumento.

Devuelve: La macro isinf devuelve un valor distinto de cero si y solo si su argumento tiene un valor infinito.


numeric_limits funciones numeric_limits son todas constexpr, por lo que funcionan bien como constantes de tiempo de compilación (suponiendo que esté utilizando la versión actual de C ++). Entonces std::numeric_limits<double>::infinity() debería funcionar en cualquier contexto.

Incluso si está utilizando una versión anterior, esto funcionará en cualquier lugar que no requiera una constante de tiempo de compilación. De su pregunta no queda claro si su uso realmente necesita una constante de tiempo de compilación o no; simplemente estar en un encabezado no necesariamente lo requiere.

Si está utilizando una versión anterior y realmente necesita una constante de tiempo de compilación, la macro INFINITY en cmath debería funcionar para usted. En realidad, es el valor float para el infinito, pero se puede convertir en un double .


#include <cmath> ... double d = INFINITY;

Puede encontrar INFINITY definido en <cmath> ( math.h ):

Una expresión constante de tipo float representa infinito positivo o sin signo, si está disponible; de lo contrario, una constante positiva de tipo float que se desborda en el momento de la traducción.