231 votos

Cómo utilizar la constante PI en C++

Quiero utilizar la constante PI y las funciones trigonométricas en algún programa en C++. Obtengo las funciones trigonométricas con include <math.h> . Sin embargo, no parece haber una definición de PI en este archivo de cabecera.

¿Cómo puedo obtener PI sin definirlo manualmente?

285voto

fritzone Puntos 9925

En algunas plataformas (especialmente las más antiguas) (ver los comentarios más abajo) puede ser necesario

#define _USE_MATH_DEFINES

y luego incluir el archivo de cabecera necesario:

#include <math.h>

y se puede acceder al valor de pi a través de:

M_PI

En mi math.h (2014) se define como:

# define M_PI           3.14159265358979323846  /* pi */

pero comprueba tu math.h para más. Un extracto del "viejo" math.h (en 2009):

/* Define _USE_MATH_DEFINES before including math.h to expose these macro
 * definitions for common math constants.  These are placed under an #ifdef
 * since these commonly-defined names are not part of the C/C++ standards.
 */

Sin embargo:

  1. en las plataformas más nuevas (al menos en mi Ubuntu 14.04 de 64 bits) no necesito definir el _USE_MATH_DEFINES

  2. En las plataformas Linux (recientes) existen long double también se proporciona como una extensión de GNU:

    # define M_PIl          3.141592653589793238462643383279502884L /* pi */

116voto

Konamiman Puntos 20578

Pi se puede calcular como atan(1)*4 . Podrías calcular el valor de esta manera y guardarlo en la caché.

68voto

BuschnicK Puntos 1593

También podría utilizar boost, que define constantes matemáticas importantes con la máxima precisión para el tipo solicitado (es decir, float vs double).

const double pi = boost::math::constants::pi<double>();

Compruebe el documentación de boost para ver más ejemplos.

40voto

Alex Puntos 331

Yo recomendaría simplemente teclear pi con la precisión que necesites. Esto no añadiría tiempo de cálculo a tu ejecución, y sería portable sin usar ninguna cabecera o #defines. Calcular acos o atan es siempre más caro que usar un valor precalculado.

const double PI  =3.141592653589793238463;
const float  PI_F=3.14159265358979f;

30voto

Matthieu M. Puntos 101624

En lugar de escribir

#define _USE_MATH_DEFINES

Yo recomendaría el uso de -D_USE_MATH_DEFINES o /D_USE_MATH_DEFINES dependiendo de su compilador.

De esta manera te aseguras de que incluso en el caso de que alguien incluya la cabecera antes que tú (y sin el #define) seguirás teniendo las constantes en lugar de un oscuro error del compilador que tardarás años en localizar.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X