C++

[C++] 소수점, math.h에 있는 M_PI 사용

kkalgo 2022. 10. 3. 18:01

 

 

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";

}