小编典典

C++11、14、17 或 20 是否为 pi 引入了标准常量?

all

C 和 C++ 中的数字 pi 存在一个相当愚蠢的问题。据我所知,任何标准都不需要M_PI定义 in 。math.h

新的 C++ 标准在标准库中引入了许多复杂的数学 -
双曲函数,std::hermite以及std::cyl_bessel_i不同的随机数生成器等等。

是否有任何“新”标准为 pi 带来了常数?如果不是 - 为什么?没有它,所有这些复杂的数学如何运作?

我知道关于 C++ 中 pi 的类似问题(它们已经有好几年了,而且标准已经老了);我想知道问题的当前状态。

我也对 为什么 C++ 仍然没有 pi 常数但有很多更复杂的数学很感兴趣。

我知道我可以将 pi 自己定义为4*atan(1)oracos(-1)double pi = 3.14;。当然。但是我为什么还要这样做呢?没有
pi,标准数学函数如何工作?


阅读 80

收藏
2022-07-30

共1个答案

小编典典

直到并包括 C++17 pi 并不是引入该语言的常量,它是一个令人头疼的问题。

我很幸运,因为我使用了boost并且他们为 pi 定义了足够多的小数位数,即使是 128
long double

如果您不使用 Boost,请自行对其进行硬编码。用三角函数定义它很诱人,但如果你这样做,你就不能让它成为constexpr.
我所知道的任何标准(参见 )也不能保证三角函数的准确性std::sqrt,所以你确实处于危险的境地,确实依赖于这样的函数。

有一种使用元编程获取 piconstexpr值的方法:参见http://timmurphy.org/2013/06/27/template-
metaprogramming-in-c/ __


来自 C20 的一些好消息。 pi一个 定义。C20 在. 例如是一个类型。
__<numbers>``std::numbers::pi``double

参考:https
://en.cppreference.com/w/cpp/numeric/constants

2022-07-30