C++의 cmath 라이브러리에는 sqrt 외에도 다양한 제곱근 계산 함수가 포함되어 있습니다. sqrt는 기본적으로 double 타입 입력에 사용되며, 나머지 함수들은 float, long double 등 다른 자료형에 맞춰 사용됩니다. 각 함수의 특징과 용도를 자세히 살펴보겠습니다.
1. sqrt() 함수
sqrt()는 double 타입 데이터에 사용되는 함수로, 결과값 역시 double 타입으로 반환됩니다. 문법은 다음과 같습니다.
double sqrt(double argument)
예제 코드
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
main() {
double x = 144.0;
double y = 180.0;
cout << fixed << setprecision(12) << sqrt(x) << endl;
cout << fixed << setprecision(12) << sqrt(y) << endl;
}실행 결과
12.000000000000 13.416407864999
주의할 점: 반드시 인수(argument)를 전달해야 하며, 인수 없이 호출하면 컴파일 오류가 발생합니다. 또한 음수를 인수로 전달하면 유효하지 않은 값인 NaN(Not a Number)이 반환됩니다.
2. sqrtf() 함수
sqrtf()는 float 타입 데이터에 사용되는 함수로, 결과값은 float 타입으로 반환됩니다. 메모리 효율이 중요하거나 단정밀도 연산이 필요한 경우에 적합합니다.
float sqrtf(float argument)
예제 코드
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
main() {
float x = 144.0;
float y = 180.0;
cout << fixed << setprecision(6) << sqrtf(x) << endl;
cout << fixed << setprecision(6) << sqrtf(y) << endl;
}실행 결과
12.000000 13.416408
sqrt()와 마찬가지로 인수를 생략하면 오류가 발생하고, 음수를 입력하면 NaN이 반환됩니다.
3. sqrtl() 함수
sqrtl()은 long double 타입 데이터에 사용되는 함수로, 일반 double보다 훨씬 높은 정밀도를 제공합니다. 특히 1018(경 단위) 수준의 매우 큰 정수를 다룰 때 정확한 결과를 얻는 데 유용합니다.
long double sqrtl(long double argument)
예제 코드
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
main() {
long long int x = 5000000000000000000;
long long int y = 999999999999999999;
cout << fixed << setprecision(12) << sqrtl(x) << endl;
cout << fixed << setprecision(12) << sqrtl(y) << endl;
}실행 결과
2236067977.499789696420 999999999.999999999476
세 가지 함수 비교 요약
| 함수 | 매개변수 타입 | 반환 타입 | 주요 용도 |
|---|---|---|---|
| sqrt() | double | double | 일반적인 배정밀도 제곱근 계산 |
| sqrtf() | float | float | 단정밀도 연산, 메모리 절약 |
| sqrtl() | long double | long double | 고정밀도 연산, 초대형 숫자 처리 |
이처럼 C++에서는 자료형에 맞는 제곱근 함수를 선택하여 사용하는 것이 좋습니다. 일반적인 경우에는 sqrt()를, 성능 최적화가 필요하면 sqrtf()를, 그리고 아주 큰 숫자나 높은 정밀도가 요구되는 상황에서는 sqrtl()을 활용하면 됩니다.