Tuesday, January 02, 2007
C언어] C에서 제곱근, 루트 근사값 계산 방법, sqrt() 함수 사용법
C에서는 우선 math.h 헤더 파일을 인클루드해 주고, sqrt() 에 실수형 숫자를 입력하면, 그 숫자의 제곱근이 구해집니다.
참고: 이 포스트의 내용은 순수한 C가 아닌, C++ 입니다. C와 C++를 구분하지 않고, C++ 중심으로 글을 썼습니다.
소스 파일명: 0.cpp
그런데 루트2를 구할 때에, sqrt(2) 이렇게 정수(int)로 2를 입력하면 안됩니다. 반드시 sqrt(2.0) 이렇게 실수형으로 2를 입력해야 합니다. 정수 뒤에 "점+제로"를 붙이면 실수형 상수가 됩니다. 제곱근 구하는 함수인 sqrt() 가 정수형을 입력받지 않기 때문입니다. 당연히 반환값도 실수형입니다. 즉 입출력이 모두 실수형입니다.
컴파일 및 실행 결과:
첫번째 실행 때는 sqrt(2.0) 이렇게 해주었는데,
두번째 실행 때는 sqrt(2) 이렇게 해주었기 때문에 에러가 났습니다.
ambiguous call to overloaded function... 의 뜻은, sqrt() 함수가 다음과 같은 3종류가 있는데
long double sqrt(long double)
float sqrt(float)
double sqrt(double)
정수형(int) 파라미터를 입력받는 sqrt() 함수는 없다는 뜻입니다.
다음과 같이 (double) 로 캐스팅하여, 2를 실수로 만들어 주어도 됩니다.
1~100까지 제곱근 계산 출력 예제:
▶▶ C언어] printf함수, 실수 소수점 자리, 너비 지정 출력 + 루트 계산 - Square Root
▶▶ C언어] 세제곱근, 네제곱근, 거듭제곱근 구하기; Cube Root Function; cbrt()
▶▶ C언어] 제곱 함수,기호, 거듭제곱(세제곱,네제곱), 몇 승 구하기; Raise Power, Pow
▶▶ C언어 VC++] 가우시안 랜덤 난수 발생; 가우스 분포 Gaussian Random Number
참고: 이 포스트의 내용은 순수한 C가 아닌, C++ 입니다. C와 C++를 구분하지 않고, C++ 중심으로 글을 썼습니다.
2의 제곱근(루트2의 근사값) 계산 출력 예제: math.h sqrt
소스 파일명: 0.cpp
#include <stdio.h>
#include <math.h>
int main(void) {
double d = sqrt(2.0);
printf("%f\n", d);
// 화면 출력 결과: 1.414214
return 0;
}
#include <math.h>
int main(void) {
double d = sqrt(2.0);
printf("%f\n", d);
// 화면 출력 결과: 1.414214
return 0;
}
그런데 루트2를 구할 때에, sqrt(2) 이렇게 정수(int)로 2를 입력하면 안됩니다. 반드시 sqrt(2.0) 이렇게 실수형으로 2를 입력해야 합니다. 정수 뒤에 "점+제로"를 붙이면 실수형 상수가 됩니다. 제곱근 구하는 함수인 sqrt() 가 정수형을 입력받지 않기 때문입니다. 당연히 반환값도 실수형입니다. 즉 입출력이 모두 실수형입니다.
컴파일 및 실행 결과:
첫번째 실행 때는 sqrt(2.0) 이렇게 해주었는데,
두번째 실행 때는 sqrt(2) 이렇게 해주었기 때문에 에러가 났습니다.
D:\Z>cl 0.cpp & 0.exe
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.
0.cpp
Microsoft (R) Incremental Linker Version 7.10.3077
Copyright (C) Microsoft Corporation. All rights reserved.
/out:0.exe
0.obj
1.414214
D:\Z>cl 0.cpp & 0.exe
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.
0.cpp
0.cpp(5) : error C2668: 'sqrt' : ambiguous call to overloaded function
D:\Program Files\Microsoft Visual C++ Toolkit\include\math.h(626): could
be 'long double sqrt(long double)'
D:\Program Files\Microsoft Visual C++ Toolkit\include\math.h(578): or
'float sqrt(float)'
D:\Program Files\Microsoft Visual C++ Toolkit\include\math.h(200): or
'double sqrt(double)'
while trying to match the argument list '(int)'
1.414214
D:\Z>
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.
0.cpp
Microsoft (R) Incremental Linker Version 7.10.3077
Copyright (C) Microsoft Corporation. All rights reserved.
/out:0.exe
0.obj
1.414214
D:\Z>cl 0.cpp & 0.exe
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.
0.cpp
0.cpp(5) : error C2668: 'sqrt' : ambiguous call to overloaded function
D:\Program Files\Microsoft Visual C++ Toolkit\include\math.h(626): could
be 'long double sqrt(long double)'
D:\Program Files\Microsoft Visual C++ Toolkit\include\math.h(578): or
'float sqrt(float)'
D:\Program Files\Microsoft Visual C++ Toolkit\include\math.h(200): or
'double sqrt(double)'
while trying to match the argument list '(int)'
1.414214
D:\Z>
ambiguous call to overloaded function... 의 뜻은, sqrt() 함수가 다음과 같은 3종류가 있는데
long double sqrt(long double)
float sqrt(float)
double sqrt(double)
정수형(int) 파라미터를 입력받는 sqrt() 함수는 없다는 뜻입니다.
다음과 같이 (double) 로 캐스팅하여, 2를 실수로 만들어 주어도 됩니다.
#include <stdio.h>
#include <math.h>
int main(void) {
double d = sqrt( (double) 2 );
printf("%f\n", d);
// 화면 출력 결과: 1.414214
return 0;
}
#include <math.h>
int main(void) {
double d = sqrt( (double) 2 );
printf("%f\n", d);
// 화면 출력 결과: 1.414214
return 0;
}
1~100까지 제곱근 계산 출력 예제:
▶▶ C언어] printf함수, 실수 소수점 자리, 너비 지정 출력 + 루트 계산 - Square Root
▶▶ C언어] 세제곱근, 네제곱근, 거듭제곱근 구하기; Cube Root Function; cbrt()
▶▶ C언어] 제곱 함수,기호, 거듭제곱(세제곱,네제곱), 몇 승 구하기; Raise Power, Pow
▶▶ C언어 VC++] 가우시안 랜덤 난수 발생; 가우스 분포 Gaussian Random Number
tag: cpp
C언어 | C/C++ (Visual C++)
감사합니다 ^^
많은 도움 됐어요
이건 C가 아니라 C++인데요?
제목에 C라 해서 들어왔는데..
C에는 오버로딩 없습니다 ;;;;
죄송합니다. C와 C++를 구분하지 않고, C++ 중심으로 글을 썼습니다.
<< Home