我想在一些c++程序中使用PI常数和三角函数。我得到三角函数包含<math。h>。然而,在这个头文件中似乎没有PI的定义。
如何获得PI而不手动定义它?
我想在一些c++程序中使用PI常数和三角函数。我得到三角函数包含<math。h>。然而,在这个头文件中似乎没有PI的定义。
如何获得PI而不手动定义它?
当前回答
我在项目中使用了一个覆盖所有基础的公共头文件:
#define _USE_MATH_DEFINES
#include <cmath>
#ifndef M_PI
#define M_PI (3.14159265358979323846)
#endif
#ifndef M_PIl
#define M_PIl (3.14159265358979323846264338327950288)
#endif
另外,如果包含<cmath>,下面所有的编译器都定义了M_PI和M_PIl常量。不需要添加只有vc++才需要的#define _use_math_definitions。
x86 GCC 4.4+
ARM GCC 4.5+
x86 Clang 3.0+
其他回答
Pi可计算为atan(1)*4。您可以这样计算值并缓存它。
你也可以使用boost,它为所请求的类型定义了最精确的重要数学常数(例如float vs double)。
const double pi = boost::math::constants::pi<double>();
查看boost文档以获得更多示例。
我在项目中使用了一个覆盖所有基础的公共头文件:
#define _USE_MATH_DEFINES
#include <cmath>
#ifndef M_PI
#define M_PI (3.14159265358979323846)
#endif
#ifndef M_PIl
#define M_PIl (3.14159265358979323846264338327950288)
#endif
另外,如果包含<cmath>,下面所有的编译器都定义了M_PI和M_PIl常量。不需要添加只有vc++才需要的#define _use_math_definitions。
x86 GCC 4.4+
ARM GCC 4.5+
x86 Clang 3.0+
你可以用它:
#define _USE_MATH_DEFINES // for C++
#include <cmath>
#define _USE_MATH_DEFINES // for C
#include <math.h>
在标准C/ c++中没有定义数学常数。要使用它们,必须首先定义_use_math_definitions,然后包括cmath或math.h。
而不是写作
#define _USE_MATH_DEFINES
我建议使用- use_math_definitions或/ d_use_math_definitions,这取决于你的编译器。
通过这种方式,即使有人在您之前包含了头文件(并且没有使用#define),您仍然可以得到常量,而不是一个晦涩的编译器错误,您需要花费很长时间来查找。