Такие значения, как M_PI, M_PI_2, M_PI_4 и т. Д. Не являются стандартными C ++, поэтому constexpr кажется лучшим решением. Могут быть сформулированы различные выражения const, которые вычисляют один и тот же пи, и меня интересует, обеспечивают ли они (все) полную точность. Стандарт C ++ явно не упоминает, как рассчитать число Пи. Поэтому я склоняюсь к определению числа «пи» вручную. Я хотел бы поделиться приведенным ниже решением, которое поддерживает все виды дробных чисел с полной точностью.
#include <ratio>
#include <iostream>
template<typename RATIO>
constexpr double dpipart()
{
long double const pi = 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899863;
return static_cast<double>(pi * RATIO::num / RATIO::den);
}
int main()
{
std::cout << dpipart<std::ratio<-1, 6>>() << std::endl;
}