standard - C++ 11, 14, 17 또는 20은 pi에 대한 표준 상수를 도입합니까?



c++ std 의미 (4)

다른 사람들이 std::pi 가 없다고 말했을 때 정확한 PI 값을 원하면 다음을 사용할 수 있습니다 :

constexpr double pi = std::acos(-1);

이것은 C ++ 구현이 acos(-1.0) 에서 올바르게 반올림 된 PI 값을 생성한다고 가정합니다. 이는 일반적이지만 보장되지는 않습니다 .

그것은 constexpr 아니지만 실제로 gcc와 같은 컴파일러를 최적화하고 clang 컴파일 타임에 그것을 평가합니다. 하지만 const 선언하는 것은 옵티마이 const 좋은 일을하는 데 중요합니다.

C와 C ++의 숫자 pi에는 다소 어리석은 문제가 있습니다. 내가 아는 한 math.h 정의 된 M_PI 는 어떤 표준에서도 요구되지 않는다.

새로운 C ++ 표준은 표준 라이브러리에서 쌍곡선 함수, std::hermitestd::cyl_bessel_i , 다른 난수 생성기 등의 복잡한 수학을 도입했습니다.

'새로운'표준 중 어느 것이 파이에 대해 일정한 가치를 가져 왔습니까? 그렇지 않다면 - 왜? 이 모든 복잡한 수학은 어떻게 그것 없이도 작동합니까?

나는 C ++에서 pi와 비슷한 질문을하고있다. (몇 년이나 표준이 오래되었다.) 문제의 현재 상태를 알고 싶습니다.

또한 C ++에 파이 상수가 없지만 더 복잡한 수학이 필요한지에 대해 매우 흥미가 있습니다.

UPD : 파이를 4 * atan (1) 또는 acos (1) 또는 double pi = 3.14로 정의 할 수 있음을 알고 있습니다. 확실한. 그런데 왜 2018 년에해야합니까? 파이없이 표준 수학 함수는 어떻게 작동합니까?


Answer #1

분명히 좋지 않은 이유는 도메인간에 보편적으로 적용 할 수있는 pi를 정의하는 명백한 유형이 없기 때문입니다.

Pi는 물론 불합리한 번호이므로 모든 C ++ 유형으로 올바르게 표현할 수 없습니다. 그러므로 자연 접근법은 사용 가능한 가장 큰 부동 소수점 유형으로 정의하는 것입니다. 그러나 가장 큰 표준 부동 소수점 유형 long double 의 크기는 C ++ 표준에 의해 정의되지 않으므로 상수 값은 시스템마다 다를 수 있습니다. 더욱이, 작업 유형이 가장 큰 유형이 아닌 프로그램의 경우 pi의 정의는 pi의 모든 사용에 성능 비용을 부과하기 때문에 부적절합니다.

모든 프로그래머가 파이의 값을 찾고 자신의 상수를 사용하기에 적합하다고 정의하는 것도 쉽지 않으므로 수학 헤더에 포함 할 수있는 큰 이점은 없습니다.


Answer #2

아닙니다. 어떤 표준도 pi (π)의 수를 나타내는 상수를 도입하지 않습니다. 코드에서 숫자를 대략적으로 계산할 수 있습니다.

constexpr double pi = 3.14159265358979323846;

C #과 같은 다른 언어는 라이브러리에 상수가 선언되어 있습니다. C ++은 그렇지 않습니다.


Answer #3

편집 됨 - 논란의 여지가 있기 때문에 필요한 용어를 삭제합니다. 절대적인 용어는 너무 많습니다.

C ++은 크고 복잡한 언어이므로, 표준위원회는 강하게 요구 되는 것을 포함하고 있습니다. 가능한 한 많이 Boost와 같은 비영어권 표준 라이브러리에 남아 있습니다.
boost::math::constants





c++17