mwultong Blog ... 프로그래밍 / 계산기

컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Tuesday, January 02, 2007

C언어] C에서 제곱근, 루트 근사값 계산 방법, sqrt() 함수 사용법


C에서는 우선 math.h 헤더 파일을 인클루드해 주고, sqrt() 에 실수형 숫자를 입력하면, 그 숫자의 제곱근이 구해집니다.


참고: 이 포스트의 내용은 순수한 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;
}


그런데 루트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>


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




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++)

3 Comments:
At November 20, 2010 at 5:53 PM, Blogger Ds said...

감사합니다 ^^
많은 도움 됐어요

 
At May 4, 2019 at 12:41 PM, Blogger Unknown said...

이건 C가 아니라 C++인데요?
제목에 C라 해서 들어왔는데..
C에는 오버로딩 없습니다 ;;;;

 
At May 4, 2019 at 7:11 PM, Blogger mwultong said...

죄송합니다. C와 C++를 구분하지 않고, C++ 중심으로 글을 썼습니다.

 

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top