ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C] C언어 M_PI 사용하기
    Programming/C언어 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 되지 않으면 해당 구문이 컴파일 되지 않기때문에 써줘야 한다.

    반응형
Designed by Tistory.