상세 컨텐츠

본문 제목

[C] C언어 M_PI 사용하기

Programming/C언어

by 영상털이범 2014. 3. 26. 00:58

본문

#include <math.h> 를 사용하여 수식을 계산할때, 원주율값이 필요 한 경우가 있다.


원주율값을 잘 외우고 있는경우 상관은 없지만, 단순히 3.14라는 값을 사용하여 알고리즘 문제를 풀 때 소수점 뒷자리 문제로 답이 틀리는 경우가 종종 발생할 수 있다. 


그렇다고 원주율을 소수점 10자리 이상 외우고 다닐수는 없다.


이럴경우 math.h에서 원주율 값을 제공해주지 않을까 찾아보지만 M_PI를 사용하면 에러가 발생한다.


M_PI 상수는 C표준이 아니기때문에 기본적으로 사용할 수 없다고 한다.


math.h를 include 하기전에


#define _USE_MATH_DEFINES


를 정의해 주어야 한다.



이제 M_PI를 사용할 수 있다.




#define _USE_MATH_DEFINES를 써주는 이유


#define _USE_MATH_DEFINES를 써줘야 하는 이유 <math.h>의 내용을 보면 알 수 있다.



#if defined(_USE_MATH_DEFINES) && !defined(_MATH_DEFINES_DEFINED)

#define _MATH_DEFINES_DEFINED


/* 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.

 */


/* Definitions of useful mathematical constants

 * M_E        - e

 * M_LOG2E    - log2(e)

 * M_LOG10E   - log10(e)

 * M_LN2      - ln(2)

 * M_LN10     - ln(10)

 * M_PI       - pi

 * M_PI_2     - pi/2

 * M_PI_4     - pi/4

 * M_1_PI     - 1/pi

 * M_2_PI     - 2/pi

 * M_2_SQRTPI - 2/sqrt(pi)

 * M_SQRT2    - sqrt(2)

 * M_SQRT1_2  - 1/sqrt(2)

 */


#define M_E        2.71828182845904523536

#define M_LOG2E    1.44269504088896340736

#define M_LOG10E   0.434294481903251827651

#define M_LN2      0.693147180559945309417

#define M_LN10     2.30258509299404568402

#define M_PI       3.14159265358979323846

#define M_PI_2     1.57079632679489661923

#define M_PI_4     0.785398163397448309616

#define M_1_PI     0.318309886183790671538

#define M_2_PI     0.636619772367581343076

#define M_2_SQRTPI 1.12837916709551257390

#define M_SQRT2    1.41421356237309504880

#define M_SQRT1_2  0.707106781186547524401


#endif  /* _USE_MATH_DEFINES */


_USE_MATH_DEFINES가 define 되지 않으면 해당 구문이 컴파일 되지 않기때문에 써줘야 한다.

관련글 더보기

댓글 영역

  • 프로필 사진
    2018.07.13 14:56
    외우는게 편할때가 있습니다.. 3.14159265358979... 단순히 pi하나만 필요할 때... const float으로 정의해 쓰면 편하더라구요. 어차피 리터럴인것..
  • 프로필 사진
    2019.06.13 16:50
    #define _USE_MATH_DEFINES 이게 정확히 해주는 일이 뭔가요?
    #define Pi 3.14159265 이런식으로 주로 써서 잘 모르겠습니다