[C++] 소수점, math.h에 있는 M_PI 사용
3053번: 택시 기하학
첫째 줄에는 유클리드 기하학에서 반지름이 R인 원의 넓이를, 둘째 줄에는 택시 기하학에서 반지름이 R인 원의 넓이를 출력한다. 정답과의 오차는 0.0001까지 허용한다.
www.acmicpc.net
파이라는 수학적 기호를 사용하려다 알게 된 방법입니다.
소수점에 대한 정리부터 하자면,
c에서는 [ %.1f ] -> 이런 식으로 출력하려는 형식 앞에 숫자를 붙여주면 반올림하여 자동으로 출력해줍니다.
하지만 C++에서는 약간 다릅니다.
cout << fixed;
cout.precision(숫자);
로 사용 가능합니다. precision(6)으로 정의했다면 소수점 아래 6자리까지 반올림하여 출력해줍니다. 간단한 방법입니다.
문제에서, 원의 넓이를 구하는 공식은 r * r * 3.141593으로 출력하는 것이고 (소수점 여섯째자리까지)
택시 기하학의 답은 r * r * 2입니다.
근데 원의 넓이의 식을 3.141593을 가져다 쓰면 오답이더군요.
어떤식으로 사용해야 할까 알아보다가..
프로그래밍에서 정의한 파이가 있는 것을 처음 알았습니다.
math.h 헤더파일에서는 pi의 값을 M_PI로 지정해둔 값이 있습니다.
이를 사용하기 위해 당연히 math.h파일을 include 해야합니다.
math.h파일을 열어보면, 11번째 줄 correct_math.h 헤더파일이 정의되있습니다.
그 안에 정의해둔 것이 _USE_MATH_DEFINES인데
대충 해석해보면 수학적 정의를 사용하려면 USE_MATH_DEFINES를 선언하라는 것입니다.
하여 correct_math_defines.h 헤더파일을 들어가보니,
22번째 줄에 PI를 지정해둔 값이 존재합니다. M_PI라고 정의한 것이 보이시죠?
============================================================================================
결론은, 정의해둔 PI값을 사용하기 위해선 math.h파일을 include한 후
#define _USE_MATH_DEFINES까지 선언해주어야 M_PI를 사용할 수 있습니다.
math.h 파일만 include하고 define을 하지 않는다면 사용하지 못합니다!
============================================================================================
#define _USE_MATH_DEFINES //수학적 정의 - M_PI를 사용하기 위해 필수
#include <iostream>
#include <math.h> // math.h파일 안에 있는 내용을 사용
using namespace std;
int main(void)
{
double r;
cin >> r;
cout << fixed; // 소수점 자리를 정의하기 위해 사용하였음.
cout.precision(6); // 6째 자리가지만 출력할 것임.
cout << r * r * M_PI << "\n";
cout << r*r * 2 << "\n";
}