1. ホーム
  2. c++

[解決済み] C++11、14、17、20では、円周率の標準定数は導入されていますか?

2022-04-16 14:18:29

質問

CとC++における数字のπについて、かなりくだけた問題があります。私の知る限りでは M_PI で定義されている math.h は、どの規格でも要求されていない。

新しいC++標準は、標準ライブラリに多くの複雑な数学、つまり双曲線関数を導入しました。 std::hermitestd::cyl_bessel_i とか、乱数発生器の違いとか、いろいろあるんです。

新しい」規格の中に、円周率の定数を持ち込んだものがありますか?もしそうでなければ、それはなぜですか?定数がなければ、この複雑な数学はどのように機能するのでしょうか?

C++の円周率に関する同様の問題(数年前の規格)を知っているので、この問題の現状を知りたい。

にも非常に興味があります。 なんでやねん C++はまだ円周率定数を持たないが、もっと複雑な計算がたくさんある。

円周率を自分で定義できることは知っているのですが、それを 4*atan(1) または acos(-1) または double pi = 3.14; . しかし、なぜそれをしなければならないのでしょうか?円周率なしで標準的な数学の関数はどのように機能するのでしょうか?

どうすれば解決するの?

C++17まで 円周率 は言語に導入された定数ではないので、めんどくさいです。

私は幸いにも ブースト を定義しており 円周率 は、128ビットでも十分に大きな小数点以下の桁数を持つ long double .

Boostを使わないのであれば、自分でハードコードしてください。三角関数で定義するのは魅力的ですが、そうすると、それを constexpr . 三角関数の精度も、私が知る限りどの規格でも保証されていません ( cf . std::sqrt ということで、このような関数に頼るのは危険です。

を取得する方法があります。 constexpr の値は 円周率 メタプログラミングを使用しています。 http://timmurphy.org/2013/06/27/template-metaprogramming-in-c/


C++20からいくつかの良いニュースです。それは の定義があります。 円周率 . C++20 では、いくつかの数学定数が <numbers> . 例えば std::numbers::pidouble 型になります。

参考にしてください。 https://en.cppreference.com/w/cpp/numeric/constants