C 和 C++ 中的数字 pi 存在一个相当愚蠢的问题。据我所知 M_PI
定义在 math.h
不是任何标准所要求的。
新的 C++ 标准在标准库中引入了许多复杂的数学 - 双曲函数、 std::hermite
和 std::cyl_bessel_i
、不同的随机数生成器等等。
是否有任何“新”标准为 pi 带来了常数?如果不是 - 为什么?没有它,所有这些复杂的数学如何运作?
我知道关于 C++ 中 pi 的类似问题(它们已经有好几年了,而且标准已经老了);我想知道问题的当前状态。
我也对 为什么 C++ 仍然没有 pi 常数但有很多更复杂的数学很感兴趣。
我知道我可以将 pi 自己定义为 4*atan(1)
或 acos(-1)
或 double pi = 3.14;
。当然。但是我为什么还要这样做呢?没有 pi,标准数学函数如何工作?
原文由 Amomum 发布,翻译遵循 CC BY-SA 4.0 许可协议
直到并包括 C++17 pi 并不是引入该语言的常量,它是一个令人头疼的问题。
我很幸运,因为我使用了 boost ,他们为 pi 定义了足够多的小数位数,即使是 128 位
long double
。如果您不使用 Boost,请自行对其进行硬编码。用三角函数定义它很诱人,但如果你这样做,你就不能让它成为
constexpr
。我所知道的任何标准也不能保证三角函数的准确性( 参见std::sqrt
),所以你确实处于危险的境地,确实依赖这样的函数。有一种使用元编程获得
constexpr
pi 值的方法:请参阅 http://timmurphy.org/2013/06/27/template-metaprogramming-in-c/来自 C++20 的一些好消息。 pi 有 一个定义。 C++20 在
<numbers>
中添加了一些数学常数。例如std::numbers::pi
是double
类型。参考: https ://en.cppreference.com/w/cpp/numeric/constants