我想在一些c++程序中使用PI常数和三角函数。我得到三角函数包含<math。h>。然而,在这个头文件中似乎没有PI的定义。

如何获得PI而不手动定义它?


当前回答

我从大学(也许是高中)就开始背圆周率到11位,所以这一直是我的首选方法:

#ifndef PI
#define PI 3.14159265359
#endif

其他回答

因为官方标准库没有定义常数PI,你必须自己定义它。因此,对于你的问题“如何获得PI而不手动定义它?”的答案是“你没有——或者你依赖于一些特定于编译器的扩展。”如果你不关心可移植性,你可以查看编译器手册。

c++允许你编写

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

但是这个常数的初始化不能保证是静态的。然而,g++编译器将这些数学函数作为内在函数处理,并能够在编译时计算这个常量表达式。

在windows (cygwin + g++)上,我发现有必要添加标记-D_XOPEN_SOURCE=500,以便预处理程序处理math.h中M_PI的定义。

我从大学(也许是高中)就开始背圆周率到11位,所以这一直是我的首选方法:

#ifndef PI
#define PI 3.14159265359
#endif

你也可以使用boost,它为所请求的类型定义了最精确的重要数学常数(例如float vs double)。

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

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

小数点后15位让人类到达月球表面并返回。任何超出这个范围的都是天文数字。你能在一个更小的尺度上测量这个吗?其他人则花了几个月的时间计算到数万亿位数。除了记录在案之外,这没什么用。

要知道你可以把圆周率计算到任意长度,但keep是实用的。