안녕하세요 JollyTree입니다 (•̀ᴗ•́)و
지난번에는 abs(), fabs(), sqrt(), pow() 수학 함수를 직접 구현하여 C/C++ 라이브러리 함수와 비교하는 자료를 포스팅하였습니다. 이번에는 추가적으로 다음 3개 수학 함수들을 직접 구현하여 컴파일러가 제공하는 라이브러리 함수와 비교하고자 합니다.
o 반올림 값을 구하는 round() 함수
o 소수점 올림 값을 구하는 ceil() 함수
o 소수점 내림 값을 리턴하는 floor() 함수
구현한 사용자 함수가 올바른 결과 값이 구해지는지의 검증은 지난 번과 마찬가지로 동일한 실험 데이터를 가지고 C/C++ 라이브러리 함수와 비교하였습니다.
double r[] = { 3.2, 3.7, -3.2, -3.7, 5.1, -6.6 };
double c[] = { 4.12, -4.12, 2.72, -2.72, 5 };
수학 함수 결과 비교(사용자 정의 함수 vs. C/C++ 라이브러리 함수):
* m_round <-> round, m_ceil <-> ceil, m_floor <-> floor
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define LINE1 "----------------------------------------------"
#define TEST_COUNT 5
/*
사용자 함수 정의
*/
//반올림 함수
double m_round(double n)
{
int r;
if (n >= 0) {
r = n + 0.5;
return r;
}
else {
r = n - 0.5;
return r;
}
}
//소수점 올림 함수
double m_ceil(double n)
{
int r = (int)n;
if (n < 0 || n == (double)r)
return r;
else
return r + 1;
}
//소수점 내림 함수
double m_floor(double n)
{
double r;
r = (int)n - ((n > 0) ? 0 : 1);
return r;
}
int main()
{
double r[] = { 3.2, 3.7, -3.2, -3.7, 5.1, -6.6 };
double c[] = { 4.12, -4.12, 2.72, -2.72, 5 };
/////////////////////////////
/* 00. m_round() 반올림 함수 시험
*******************************************/
puts(LINE1);
printf(" >> round vs. m_round : 반올림 함수 시험\n");
puts(LINE1);
for (int i = 0; i < TEST_COUNT; i++)
{
printf("[라이브러리] %.2f -> %.1f\n", r[i], round(r[i]));
printf("[만든 함수] %.2f -> %.1f\n", r[i], m_round(r[i]));
puts("");
}
puts("");
/* 00. m_ceil() 소수점 올림 함수 시험
*******************************************/
puts(LINE1);
printf(" >> ceil vs. m_ceild : 소수점 올림 함수 시험\n");
puts(LINE1);
for (int i = 0; i < TEST_COUNT; i++)
{
printf("[라이브러리] %.2f -> %.1f\n", c[i], ceil(c[i]));
printf("[만든 함수] %.2f -> %.1f\n", c[i], m_ceil(c[i]));
puts("");
}
puts("");
/* 00. m_floor() 소수점 내림 함수 시험
*******************************************/
puts(LINE1);
printf(" >> flood vs. m_flood : 소수점 내림 함수 시험\n");
puts(LINE1);
for (int i = 0; i < TEST_COUNT; i++)
{
printf("[라이브러리] %.2f -> %.1f\n", c[i], floor(c[i]));
printf("[만든 함수] %.2f -> %.1f\n", c[i], m_floor(c[i]));
puts("");
}
puts("");
return 0;
}
|
cs |
실행결과(Output):
실험 결과 C/C++ 라이브러리 함수와 동일하게 결과가 계산된 것을 확인하였습니다. 조금이라도 도움이 되었으면 좋겠습니다. 이상 JollyTree였습니다 (•̀ᴗ•́)و