定义PI的值



我正在做一个新项目,我正在努力编写最干净、最容易阅读、希望也是最高效的代码。

我需要使用PI,但显然它在数学中没有定义。h。所以我读到了关于这样做的文章:

const double PI = atan(1.0)*4

但我得到了这个错误:

函数调用不能出现在常量表达式中

有什么想法吗?如何将PI作为常数?

此外,请注意,我正在努力通过这个项目尽可能多地学习,所以如果你也能解释为什么你的答案会起作用,那就太好了。谢谢

怎么样:

const double PI = 3.1415926535897932384626433832795028841971693993751058209;

在我看来,这比atan(1.0)*4更干净、更容易阅读、更高效。

您错误地标记了问题。在C++中,以下内容定义明确并将编译:

#include <math.h>
const double PI = atan(1.0)*4;

但在C中,文件范围内的初始化程序是不允许的

在C中,您需要使用非标准宏(如GCC中的M_PI),创建自己合适的宏或文字(Ned Batchelder已经为您完成了最困难的部分),或者在适当的早期在自己的函数中初始化它。

#include <math.h>
const double PI = M_PI;

不能为全局const double调用函数,因为需要在编译时计算常量。在运行时,atan()可以是任何东西。您可以安排在启动时调用它一次,但使用已经可用的实际PI常数更好。

(实际上直接使用M_PI也不错)

编辑:一年多后,我花了很多评论支持票,重读了我自己的答案,才明白为什么人们会对我关于常数的声明感到愤怒。我跳过了一步:正如大家所说,在运行时可以像初始化double一样轻松地初始化const double然而,如果您使用全局变量(而不是常量表达式)来存储pi,您将失去一些优化机会。gcc的一些实验表明,这甚至没有我想象的那么糟糕,这提出了一个全新的问题。。。

汇编语言怎么样?

fldpi

它只是使用浮点指令的替代方案

最新更新