c++ - 在C++,如何使用Pi常量

我想在C 程序中使用PI常数和三角函数,include 然而,在这个头文件中似乎没有关于PI的定义。

如何在没有手动定义的情况下获取PI?

时间:

在某些(尤其是较旧的)平台上,你可能需要


#define _USE_MATH_DEFINES

然后包含必要的头文件:


#include <math.h>

而圆周率的价值可以通过以下途径来访问:

 
M_PI

 

在我的math.h (2014 )中,它定义为:


# define M_PI 3.14159265358979323846 /* pi */

但是要检查你的math.h ,来自"旧的"math.h (在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.
 */

然而:

  1. 在较新的平台上(至少在我的64位Ubuntu 14.04上),我不需要定义_USE_MATH_DEFINES

  2. 在(最近)Linux平台上,GNU扩展提供了long double值:

    
    # define M_PIl 3.141592653589793238462643383279502884L /* pi */
    
    

圆周率可用atan(1)*4 计算,你可以用这种方法计算出值并缓存它。

你也可以使用boost,它定义了重要的数学常数,类型的最大准确度(即浮点与双精度)。


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

查看boost文档以获得更多例子。


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


#define _USE_MATH_DEFINES

我建议根据你的编译器使用-D_USE_MATH_DEFINES/D_USE_MATH_DEFINES

如果你不关心可移植性,你可以检查你的编译器手册。

C++允许你编写


const double PI = std::atan(1.0)*4;

但是,G++编译器将这些数学函数作为内在函数进行处理,并且能够在编译时计算该常量表达式。

math.h的posix手册页


 The <math.h> header shall provide for the following constants. The
 values are of type double and are accurate within the precision of the
 double type.

 M_PI Value of pi

 M_PI_2 Value of pi/2

 M_PI_4 Value of pi/4

 M_1_PI Value of 1/pi

 M_2_PI Value of 2/pi

 M_2_SQRTPI
 Value of 2/ sqrt pi

标准C++的PI没有常量。

许多C++编译器在cmath (或math.h中)中定义M_PI作为非标准扩展,你可能必须先#define _USE_MATH_DEFINES才能看到它。

我通常更喜欢定义自己的: const double PI = 2*acos(0.0);

你可以定义自己的PI常数!


#include<iostream>
using namespace std;

int main()
{
 const double PI = 3.141592;
}

...