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

C++빌더 강좌/문서
C++Builder Programming Tutorial&Docments
[220] 약방의 감초처럼 많이 쓰이는 비율 계산.
김태선 [cppbuilder] 29618 읽음    2010-10-25 14:01
프로그래밍하다 보면 정말 많이 쓰이는게 비율 계산입니다.
가령 내 키가 저 산 높이라면 내 심장은 저기 어디 위치 쯤일 것이다라고 수학적으로 계산하는 것이죠.
비율 계산은 특히 화면에 그래프를 그려야 하는 경우면 거의 다 쓰이게 되는데,
옛날에는 중학생 과정(요즘은 잘 몰라서)에 나오기 때문에 누구나 다 쉽게 할수 있었습니다.

워낙 쉬우거닌까 따로 설명할 필요도 없이 닥치면 누구나 해결하는 것이지만
가끔 바쁘다 보면 헷갈릴때도 있습니다. (나이가 들어서 그런가?)

그래서 간단하게 그림으로 만들어 봤습니다.


그림에서 길이 A 인 막대의 p 위치를
길이가 B 인 막대의 x 위치를 찾는게 비율계산의 핵심인데,
비율 계산 공식에 의해
A:B = p:x 가 성립해야 하므로,
Ax = Bp 가 되고
x = Bp / A 가 되죠.

가령 A=5 B=10 이라고 하고 p=3 이라면
x = (3 * 10) / 5 = 6 으로 구해 집니다.

실제 실무에서는 이렇게 간단하고도 명료하게 비율 계산을 해야하는 경우 보다는,
매우 복잡한 상황에서의 계산이 요구되는 경우가 더 많은데
계산 공식이 아무리 복잡해 보여도 비율 계산의 핵심만 짚으면 어렵지 않게 해결할 수 있습니다.


하나 더 덤으로 프로그래머가 유의해야할 사항은
매우 정확한 계산을 위해서는 double 형으로 모두 계산하고
사용처가 int 형 같으면 계산된 결과값을 int 로 옮기는게 정밀도에 있어 유리합니다.

double x = 계산 공식;
int use = x;
이렇게 처리하는게 가장 좋은데

int x = 계산 공식;
이런 식으로 하면 정수 형에 대입하는 것을 고려해 컴파일러의 계산 정밀도가 낮아 지기 때문에
원치 않는 오차를 발생시킬 수 있기 때문입니다.


이걸 강의라고 하기는 그렇지만, 워낙 많이 쓰이는 것이고
혹시 이런 쉬운 거 때문에 시간 낭비하는 일이 생길까봐 여기에 올려둡니다.


그럼..
locke [syiware]   2010-12-01 13:39 X
덧붙여서 실수를 정수대입하거나 int로 타입캐스트 할 경우 소수점 이하가 그냥 절삭되거든요. 정확한 계산을 위해서 부동소수점으로 계산한후 정수에 값을 대입할때는 0.5를 더해서 정수화해주는 방식이 필요할듯 싶습니다.
예) int i = int(3.14 + 0.5f);
반올림 함수가 뭐 있었는데 생각이 안난다는..ㅠㅠ
Nibble [gameover]   2011-01-01 14:17 X
일반화 하면 영점이동->스케일변환->원점이동 이지요.
문제에서는 영점이동이 필요없는 예를 들고 계시니, 스케일변환만 하면 되구요.
ceil 과 floor 를 용도에 맞게 쓰시는것도 나쁘진 않습니다만, 함수호출이라 썩 내키진 않지요.
대신, 단순히 + 0.5f 를 쓰시면, 음수의 반올림 문제가 발생됩니다.

+ -

관련 글 리스트
220 약방의 감초처럼 많이 쓰이는 비율 계산. 김태선 29618 2010/10/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.