예 제 : round |
#include <Turboc.h>
#include <math.h>
#define banollim(x,dig) (floor((x)*pow(10,dig)+0.5)/pow(10,dig))
void main(void)
{
double x=123.456789;
int i;
for (i=-2;i<5;i++) {
printf("%f의 %d자리 반올림 = %f \n",x,i,banollim(x,i));
}
}
banollim 함수는 실수 x와 반올림할 자리수 dig를 인수로 전달받는데 dig는 0을 기준(Zero Base)으로 하므로 우리가 생각하는 소수점 자리수보다는 하나 더 작다. 즉 dig가 0일 때 소수점 첫 번째 자리를 지정하며 n일 때 n+1자리에서 반올림하여 결국 반올림 후 dig자리까지가 유효한 수로 남게 된다. pow 함수는 음수승도 잘 계산하므로 dig에 음수를 주면 정수부에서 반올림을 할 수도 있다. 실행 결과는 다음과 같다.
123.456789의 -2자리 반올림 = 100.000000
123.456789의 -1자리 반올림 = 120.000000
123.456789의 0자리 반올림 = 123.000000
123.456789의 1자리 반올림 = 123.500000
123.456789의 2자리 반올림 = 123.460000
123.456789의 3자리 반올림 = 123.457000
123.456789의 4자리 반올림 = 123.456800
지정한 자리수에서 정확하게 반올림되었다. 이렇게 한 번 매크로로 만들어 놓으면 임의의 실수를 임의의 자리에서 반올림할 때 편리하게 활용할 수 있을 것이다. 이 예제에 대한 분석은 여러분들이 직접 해 보기 바라며 매크로가 마음에 들면 종종 애용하기 바란다.
'IT Life' 카테고리의 다른 글
Microsoft 무선 옵티컬 데스크탑 3000 (0) | 2007.04.12 |
---|---|
Vista는 싫고 XP는 32bit라 싫다면? (10) | 2007.04.11 |
케이스 쓸만한거.. (0) | 2007.04.05 |
최종업그레이드 완료시스템 (0) | 2007.04.03 |
[AMD CPU 가격 인하] AMD 브리즈번 4400+ (2) | 2007.03.29 |
페도라코어에서 SELINUX 관련 설정(FTP관련) (0) | 2007.03.19 |
객체지향교제 관련 참고자료 (0) | 2007.03.06 |