我想在一些c++程序中使用PI常数和三角函数。我得到三角函数包含<math。h>。然而,在这个头文件中似乎没有PI的定义。
如何获得PI而不手动定义它?
我想在一些c++程序中使用PI常数和三角函数。我得到三角函数包含<math。h>。然而,在这个头文件中似乎没有PI的定义。
如何获得PI而不手动定义它?
当前回答
你可以用它:
#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。
其他回答
#include <cmath>
const long double pi = acos(-1.L);
而是从芯片上的FPU单元获取:
double get_PI()
{
double pi;
__asm
{
fldpi
fstp pi
}
return pi;
}
double PI = get_PI();
我从大学(也许是高中)就开始背圆周率到11位,所以这一直是我的首选方法:
#ifndef PI
#define PI 3.14159265359
#endif
我刚刚看到了Danny Kalev写的一篇文章,它为c++ 14及以上版本提供了一个很好的建议。
template<typename T>
constexpr T pi = T(3.1415926535897932385);
我认为这非常酷(尽管我会在其中使用最高精度的PI),特别是因为模板可以基于类型使用它。
template<typename T>
T circular_area(T r) {
return pi<T> * r * r;
}
double darea= circular_area(5.5);//uses pi<double>
float farea= circular_area(5.5f);//uses pi<float>
你可以这样做:
#include <cmath>
#ifndef M_PI
#define M_PI (3.14159265358979323846)
#endif
如果M_PI已经在cmath中定义,那么除了包含cmath之外,它不会做任何其他事情。如果M_PI没有定义(在Visual Studio中就是这种情况),它会定义它。在这两种情况下,都可以使用M_PI来获取pi的值。
这个圆周率值来自Qt Creator的qmath.h。