C ++에서 PI 상수를 사용하는 방법 싶습니다. 삼각 함수를include <math.h> . 그러나이

일부 C ++ 프로그램에서 PI 상수 및 삼각 함수를 사용하고 싶습니다. 삼각 함수를include <math.h> . 그러나이 헤더 파일에는 PI에 대한 정의가없는 것 같습니다.

PI를 수동으로 정의하지 않고 어떻게 얻을 수 있습니까?



답변

일부 (특히 오래된) 플랫폼 (아래 주석 참조)에서 다음을 수행해야 할 수도 있습니다.

#define _USE_MATH_DEFINES

필요한 헤더 파일을 포함하십시오.

#include <math.h>

pi의 값은 다음을 통해 액세스 할 수 있습니다.

M_PI

math.h(2014)에서는 다음과 같이 정의됩니다.

# define M_PI           3.14159265358979323846  /* pi */

하지만 math.h더 확인하십시오 . “이전”에서 추출한 내용 math.h(2009 년) :

/* Define _USE_MATH_DEFINES before including math.h to expose these macro
 * definitions for common math constants.  These are placed under an #ifdef
 * since these commonly-defined names are not part of the C/C++ standards.
 */

하나:

  1. 최신 플랫폼 (적어도 내 64 비트 Ubuntu 14.04에서는)에서 _USE_MATH_DEFINES

  2. (최근) Linux 플랫폼에는 long doubleGNU 확장으로 제공된 값도 있습니다.

    # define M_PIl          3.141592653589793238462643383279502884L /* pi */

답변

Pi는로 계산할 수 있습니다 atan(1)*4. 이 방법으로 값을 계산하고 캐시 할 수 있습니다.


답변

요청 된 유형 (예 : float vs double)에 대해 최대 정확도로 중요한 수학 상수를 정의하는 boost를 사용할 수도 있습니다.

const double pi = boost::math::constants::pi<double>();

더 많은 예제 는 부스트 문서 를 확인하십시오 .


답변

대신 FPU 유닛 온 칩에서 가져 오십시오.

double get_PI()
{
    double pi;
    __asm
    {
        fldpi
        fstp pi
    }
    return pi;
}

double PI = get_PI();


답변

필요한 정밀도로 pi를 입력하는 것이 좋습니다. 이렇게하면 계산에 계산 시간이 추가되지 않으며 헤더 나 #defines를 사용하지 않고도 이식 가능합니다. acos 또는 atan을 계산하는 것은 사전 계산 된 값을 사용하는 것보다 항상 비쌉니다.

const double PI  =3.141592653589793238463;
const float  PI_F=3.14159265358979f;


답변

쓰기보다는

#define _USE_MATH_DEFINES

내가 사용하는 것이 좋습니다 것 -D_USE_MATH_DEFINES또는/D_USE_MATH_DEFINES컴파일러를 컴파일러에 따라 합니다.

이렇게하면 헤더를 포함하기 전에 누군가가 헤더를 포함하는 경우에도 (#define이없는 경우) 추적하는 데 오랜 시간이 걸리는 모호한 컴파일러 오류 대신 상수가 여전히 유지됩니다.


답변

공식 표준 라이브러리는 상수 PI를 정의하지 않으므로 직접 정의해야합니다. 따라서 귀하의 질문에 대한 답변은 “PI를 수동으로 정의하지 않고 어떻게 얻을 수 있습니까?” “아니요-또는 컴파일러 특정 확장에 의존합니다.” 이식성에 대해 걱정하지 않는다면 컴파일러 매뉴얼에서 확인할 수 있습니다.

C ++를 사용하면 쓸 수 있습니다

const double PI = std::atan(1.0)*4;

그러나이 상수의 초기화가 정적 인 것은 아닙니다. 그러나 G ++ 컴파일러는 이러한 수학 함수를 내장 함수로 처리하며 컴파일시이 상수 표현식을 계산할 수 있습니다.