C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[633] 아래 제곱근에 대한 보충. 덧셈만으로 제곱근 구하기
열씸! [cappuccino] 8663 읽음    2007-03-05 07:22
사실 이러한 코딩은 8비트 시절 어셈블리(6502)로도 흔히 써먹던 방법입니다.

고1 수준의 수학책에 보면 나오죠.
n^2 = 시그마{i = 1 to n} (2i - 1)
즉, 1부터 시작하는 홀수를 차례로 더해 어떤수(n^2)이 되면, 그 더한 횟수가 어떤수의 제곱근이란 거죠.

말이 복잡한가요?
예를 들어 봅시다.
1 + 3 = 4 죠?
4를 만드는데 홀수 몇개가 필요했죠? 2 입니다.
즉 4의 제곱근은 2죠

1 + 3 + 5 = 9 죠? 즉 9의 제곱근은 3입니다.

이런식이죠.

도형으로 그려보면 오히려 더 쉬운데
똑같은 크기의 정사각형 블럭이 있다고 가정하고
블럭 하나에 블럭 셋을 더한단 말은

# + ### -->

##
##

이런 모양이 되죠?

거기다 ##### 를 더하면

###
###
###

모양이 됩니다. 당연하게도.

즉, 정사각형의 가로 세로 크기를 1 늘인단 말은
##    #
##    #

##    #
원래의 길이 * 2(밑변 + 높이) + 1 이란 말이라... 홀수가 되는것이죠.

그렇다면 소수점 까지의 제곱근은 어떻게 구하느냐.

sqrt(n) * sqrt(100) / 10 = sqrt(n) 라는 등식은 당연한것이죠? sqrt(100) / 10 = 1 이니까요
따라서 sqrt(n * 100) / 10 = sqrt(n) 또한 성립하고
덧셈으로 제곱근 구하는 방법으론 자연수 형태의 제곱근 밖에 구할 수 없지만,
100 ^ 원하는 자리수 로 곱해서 구한 다음 10 ^ 원하는 자리수로 나눌때 소수점을 고려해 주면 되는것이죠.

p.s. 저런걸 신문에 내는 사람도... 조선시대를 우습게 보는게 아닐지...

+ -

관련 글 리스트
633 아래 제곱근에 대한 보충. 덧셈만으로 제곱근 구하기 열씸! 8663 2007/03/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.