From 46dee0a18e8c1ee4cefbbae0e23c5a64cdb9c8c5 Mon Sep 17 00:00:00 2001 From: joon2974 <vnfmsdyd4@naver.com> Date: Wed, 19 Aug 2020 22:07:50 +0900 Subject: [PATCH] add README --- Makefile | 25 +-- README.md | 182 ++++++++++++++++-- fx_s1516.zip | Bin 1324 -> 0 bytes fx_s1516_double.c | 24 +-- fx_s1516_double.h | 29 ++- ...fx_s1516_longlong.c => fx_s1516_longlong.c | 41 ++-- ...fx_s1516_longlong.h => fx_s1516_longlong.h | 5 +- fx_s1516_longlong/fx_s1516_longlong.c | 37 ---- fx_s1516_longlong/fx_s1516_longlong.h | 38 ---- gprof/fx_s1516_double.c | 51 ----- gprof/fx_s1516_double.h | 26 --- images/image-20200819214427030.png | Bin 0 -> 23884 bytes images/image-20200819214731886.png | Bin 0 -> 20278 bytes images/image-20200819214809542.png | Bin 0 -> 10956 bytes images/image-20200819214821430.png | Bin 0 -> 10928 bytes longtest.c | 14 +- test.c | 143 +++++++++++--- 17 files changed, 354 insertions(+), 261 deletions(-) delete mode 100644 fx_s1516.zip rename gprof/fx_s1516_longlong.c => fx_s1516_longlong.c (89%) rename gprof/fx_s1516_longlong.h => fx_s1516_longlong.h (91%) delete mode 100644 fx_s1516_longlong/fx_s1516_longlong.c delete mode 100644 fx_s1516_longlong/fx_s1516_longlong.h delete mode 100644 gprof/fx_s1516_double.c delete mode 100644 gprof/fx_s1516_double.h create mode 100644 images/image-20200819214427030.png create mode 100644 images/image-20200819214731886.png create mode 100644 images/image-20200819214809542.png create mode 100644 images/image-20200819214821430.png diff --git a/Makefile b/Makefile index 96c6c65..784a7f4 100644 --- a/Makefile +++ b/Makefile @@ -1,18 +1,19 @@ -SRCS := test.c fx_s1516_double.c +SRCS := test.c fx_s1516_double.c fx_s1516_longlong.c OBJS = $(SRCS:.c=.o) CC = gcc -CFLAGS = -c -Wall -g -# CFLAGS = -c -Wall -O2 +CFLAGS = -Wall -fx_x1516_double: $(OBJS) - $(CC) -o $@ $^ +fx_test: $(OBJS) + $(CC) -o $@ $^ -lm -.c.o: - $(CC) ${CFLAGS} $< +test.o: test.c + $(CC) $(CFLAGS) -c $^ -clean: - -rm $(OBJS) - rm fx_x1516_double +fx_s1516_double.o: fx_s1516_double.c + $(CC) -c $^ + +fx_s1516_longlong.o: fx_s1516_longlong.c + $(CC) -c $^ -dep: - $(CC) -M $(SRCS) \ No newline at end of file +clean: + rm $(OBJS) fx_test \ No newline at end of file diff --git a/README.md b/README.md index d402b00..0767b2b 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ -## fx_s1516 Library +## fx_s1516 Library - Step 1(double) ### macros @@ -50,20 +50,20 @@ ### functions -| Name | Return type | Parameters | Description | -| ---------------- | ----------- | --------------------- | ------------------------------------------------- | -| double_to_fx | double | double a | double형 a값을 fx_s1516형으로 형 변환 | -| fx_to_double | double | fx_s1516 a | fx_s1516형 a값을 double형으로 형 변환 | -| fx_s1516_add | double | double a, double b | fx_s1516 연산으로 a + b값을 계산 | -| fx_s1516_sub | double | double a, double b | fx_s1516 연산으로 a - b값을 계산 | -| fx_s1516_mul | double | double a, double b | fx_s1516 연산으로 a * b값을 계산 | -| fx_s1516_div | double | double a, double b | fx_s1516 연산으로 a / b값을 계산 | -| degree_to_radian | double | fx_s1516 a | fx_s1516형 a값을 radian 값으로 변환 | -| fx_s1516_sin | double | double a | 라디안 값을 받아 fx_s1516 연산으로 sin값을 계산 | -| fx_s1516_sqrt | double | double a | fx_s1516 연산으로 a의 제곱근 계산 | -| fx_s1516_pow | double | double a, double b | fx_s1516 연산으로 a의 b거듭제곱을 계산 | -| fx_s1516_log | double | double a, double b | fx_s1516 연산으로 b를 밑으로 하는 a의 로그를 계산 | -| baselog | double | double a, double base | base를 밑으로 하는 a의 로그를 계산 | +| Name | Return type | Parameters | Description | +| -------------------- | ----------- | --------------------- | ------------------------------------------------- | +| double_to_fx | double | double a | double형 a값을 fx_s1516형으로 형 변환 | +| fx_to_double | double | fx_s1516 a | fx_s1516형 a값을 double형으로 형 변환 | +| fx_s1516_double_add | double | double a, double b | fx_s1516 연산으로 a + b값을 계산 | +| fx_s1516_double_sub | double | double a, double b | fx_s1516 연산으로 a - b값을 계산 | +| fx_s1516_double_mul | double | double a, double b | fx_s1516 연산으로 a * b값을 계산 | +| fx_s1516_double_div | double | double a, double b | fx_s1516 연산으로 a / b값을 계산 | +| degree_to_radian | double | fx_s1516 a | fx_s1516형 a값을 radian 값으로 변환 | +| fx_s1516_double_sin | double | double a | 라디안 값을 받아 fx_s1516 연산으로 sin값을 계산 | +| fx_s1516_double_sqrt | double | double a | fx_s1516 연산으로 a의 제곱근 계산 | +| fx_s1516_double_pow | double | double a, double b | fx_s1516 연산으로 a의 b거듭제곱을 계산 | +| fx_s1516_double_log | double | double a, double b | fx_s1516 연산으로 b를 밑으로 하는 a의 로그를 계산 | +| baselog | double | double a, double base | base를 밑으로 하는 a의 로그를 계산 | @@ -138,6 +138,158 @@ ### +## fx_s1516 Library - Step 2(long long) + +### macros + +| Macro | Description | +| ------ | ----------------------------------------------------- | +| P2_16 | 고정 소수점 표현을 위해 필요한 2^16을 정수형으로 정의 | +| fP2_16 | 고정 소수점 표현을 위해 필요한 2^16을 실수형으로 정의 | + +### functions + +| Name | Return type | Parameters | +| ---------------------- | ----------- | ---------------------- | +| longlong_to_fx | fx_s1516 | long long a | +| fx_to_longlong | long long | fx_s1516 a | +| fx_s1516_longlong_mul0 | fx_s1516 | fx_s1516 a, fx_s1516 b | +| fx_s1516_longlong_mul1 | fx_s1516 | fx_s1516 a, fx_s1516 b | +| fx_s1516_longlong_mul2 | fx_s1516 | fx_s1516 a, fx_s1516 b | +| fx_s1516_longlong_mul3 | fx_s1516 | fx_s1516 a, fx_s1516 b | +| fx_s1516_longlong_mul4 | fx_s1516 | fx_s1516 a, fx_s1516 b | +| fx_s1516_longlong_div0 | fx_s1516 | fx_s1516 a, fx_s1516 b | +| fx_s1516_longlong_div1 | fx_s1516 | fx_s1516 a, fx_s1516 b | +| fx_s1516_longlong_div2 | fx_s1516 | fx_s1516 a, fx_s1516 b | +| fx_s1516_longlong_sin | fx_s1516 | fx_s1516 fa | +| fx_s1516_longlong_sqrt | fx_s1516 | fx_s1516 fa | + +## Function Descriptions + +### 1. Type conversion + +- **longlong_to_fx** + long long 형 변수를 fx_s1516형으로 형 변환 +- **fx_to_longlong** + fx_s1516형 변수를 long long 형으로 형 변환 + +### 2. Multiplication + +- **fx_s1516_longlong_mul0** + - 두 수 a, b를 받아 a를 fixed64(long long)으로 형 변환 한 후 b와 곱하여 16 만큼 오른쪽으로 shift하여 연산한다. +- **fx_s1516_longlong_mul1** + - 두 수 a, b를 받아 먼저 a와 b를 곱한 뒤 소수부의 크기 즉, 16 만큼 오른쪽으로 shift 연산한다. a, b가 큰 수일 경우 overflow가 발생할 수 있다. +- **fx_s1516_longlong_mul2** + - 두 수 a, b를 받아 a와 b 각각 오른쪽으로 8 만큼 shift연산한 뒤 곱한다. + - mul1과 달리 overflow의 위험은 줄지만 작은 수의 경우에는 shift 연산에 의해 underflow가 발생활 확률이 있으므로 정확도가 낮아진다. +- **fx_s1516_longlong_mul3** + - 두 수 a, b를 받아 a는 10만큼, b는 6 만큼 오른쪽으로 shift연산한 뒤 곱한다. + - mul2와 비슷하지만 a를 더 많이 shift하므로 a에서 underflow가 발생할 확률이 높고 비교적 정확도가 떨어진다. + - a와 b중 큰 수가 왼쪽에 있을 때 그 반대보다 더 정확한 연산을 한다. +- **fx_s1516_longlong_mul4** + - 두 수 a, b를 받아 a와 b 각각 오른쪽으로 4 만큼 shift연산하여 곱한 후 다시 오른쪽으로 8만큼 shift연산한다. + - a와 b를 그대로 곱하지 않고 4비트씩 shift하여 overflow 확률을 낮추면서 4 비트씩 밖에 shift하지 않으므로 underflow가 발생할 확률도 낮은 방법이다. + +### 3. Division + +- **fx_s1516_longlong_div0** + - 두 수 중에서 나누어 지는 수 a를 fixed64(long long)으로 캐스팅 한 후 소수부 크기 16만큼 왼쪽으로 shift 연산을 하고난 후 나누는 수 b로 나누어 연산한다. + - a, b가 비슷한 범위의 숫자이거나 실수형 계산 시 소수점이 나오는 경우 오차범위가 커지므로 그것을 방지하는 방법이다. + - 캐스팅 작업이 있어 다른 함수보다 비교적 속도가 느리다. +- **fx_s1516_longlong_div1** + - div0과 다르게 별도의 캐스팅 없이 나누어지는 수 a를 8비트 왼쪽으로 shift한 후 나누는 수 b로 나누어 다시 왼쪽으로 8비트 shift 하여 연산한다. + - 캐스팅 작업이 없으므로 속도가 비교적 빠르며 a가 큰 수일 경우 overflow의 가능성이 있다. +- **fx_s1516_longlong_div2** + - 앞의 두 함수와 다르게 나누는 수 b를 오른쪽으로 16비트 shift한 후 나누어지는 수 a를 나누어 연산한다. + - div1과 마찬가지로 캐스팅이 없어서 비교적 연산 속도가 빠르며 overflow 발생 확률은 작지만 b가 작은 수일 경우 underflow가 발생할 수 있다. + +### 4. Exponent + +- **fx_s1516_longlong_sin** + + - Sin Table + + ```bash + const fixed32 fx32_SinTable[92] = { 0,1143,2287,3429,4571,5711,6850,7986,9120,10252,11380,12504,13625,14742,15854,16961,18064,19160,20251,21336,22414,23486,24550,25606,26655,27696,28729,29752,30767,31772,32768,33753,34728,35693,36647,37589,38521,39440,40347,41243,42125,42995,43852,44695,45525,46340,47142,47929,48702,49460,50203,50931,51643,52339,53019,53683,54331,54963,55577,56175,56755,57319,57864,58393,58903,59395,59870,60326,60763,61183,61583,61965,62328,62672,62997,63302,63589,63856,64103,64331,64540,64729,64898,65047,65176,65286,65376,65446,65496,65526,65536,65526 + }; + ``` + + - 0 ~ 91도 까지의 sin 값을 저장하는 table이며 math 등 외부 라이브러리의 잦은 호출을 방지하여 성능상 이점을 준다. + + - 제일 먼저, 입력으로 받은 라디안 값 fa가 음수인지를 체크하여 만약 음수라면 부호를 -로 바꾸어 주고 계산을 위해 fa를 양수로 바꾼다. 이후 fa가 360보다 클 수도 있으므로 fa를 360으로 나눈 후 계산을 진행한다. + + - sin함수는 180 ~ 360 사이에서는 음수이기 때문에 fa를 미리 define해 둔 FX32_180과 비교하여 그것보다 크거나 같다면 부호를 반전하고 fa에서 그 값을 빼준다. + + - 이후 미리 구해둔 sin table을 이용하여 ret0과 diff를 구한 후 shift연산하여 sin 값을 계산한다. + +## Functions Accuracy Comparison + +### 1. Multiplication + +``` +fx_s1516_double_mul: 22888.183594 +fx_s1516_longlong_mul0: 22888 +fx_s1516_longlong_mul1: 22888 +fx_s1516_longlong_mul2: 22815 +fx_s1516_longlong_mul3: 22649 +fx_s1516_longlong_mul4: 22888 +``` + +- mul0, mul1, mul4는 높은 정확도를 보이는 것으로 보아 overflow가 발생하지 않았고, mul4에서는 shift로 인한 비트 손실이 발생하지 않았음을 알 수 있다. +- mul2, mul3은 다른 함수에 비해 비교적 낮은 정확도를 보였는데 많은 수의 비트를 shift하다 보니 비트 손실이 발생하여 정확도가 낮아졌음을 예측해 볼 수 있다. + +### 2. Division + +``` +fx_s1516_double_div: 131072.000000 +fx_s1516_longlong_div0: 131072 +fx_s1516_longlong_div1: 131072 +fx_s1516_longlong_div2: 142857 +``` + +- div0, div1은 높은 정확도를 보이며 shift로 인해 a의 값이 손실되지 않았음을 알 수 있다. +- div2는 비교적 낮은 정확도를 보이는데 b를 shift하며 어느 정도의 데이터가 손실되었음을 예측해 볼 수 있다. + + + +## Functions Speed Comparison + +### 1. Multiplication + + + +- time이 적을수록 빠른 함수이므로 mul2 > mul1 > mul3 > mul0 > mul4 순서로 속도가 빠른 것을 알 수 있다. +- shift 연산 3번, 곱셈 연산 1번을 실행하는 mul4가 가장 느렸고, fixed64로 캐스팅하는 작업이 있는 mul0도 비교적 느린 것을 확인할 수 있었다. +- 나머지 mul2, mul1, mul3 세 연산은 속도가 같거나 거의 차이가 없는 것을 확인할 수 있다. +- 위 결과로 미루어 보아 캐스팅, shift 연산의 횟수 등이 실행 속도에 영향을 주는 것으로 예상해볼 수 있다. + +### 2. Division + + + +- div 연산은 div2 > div1 > div0 순서로 속도가 빠른 것을 확인할 수 있다. +- mul에서 확인한 것과 같이 캐스팅 연산이 있는 div0이 상대적으로 느렸으며 shift 횟수가 1회 더 많은 div1이 div2보다 느린 것을 확인할 수 있다. +- div의 결과로도 캐스팅, shift 연산의 횟수가 실행 속도에 영향을 주는 것으로 예상이 가능하다. + + + +## Test method + +### Test file change + +- ```ifdef``` 구문을 사용해 매크로에 따라 실행되는 구문이 다르게 수정하였다. +- 매크로 종류 + - fx_mul: double, long long 곱셈 함수 테스트 + - fx_div: double, long long 나눗셈 함수 테스트 + - fx_sin: double, long long sin 함수 테스트 + - fx_sqrt: double, long long 제곱근 함수 테스트 + +### Run make + +- make 사용시 테스트 하고 싶은 함수의 종류에 따라 다른 매크로를 정의하여 실행 파일을 만든 후 해당 실행파일을 실행한다. + - ```make CFLAGS=-D[MACRO]``` + - ```./fx_test.exe``` + ## References ###### Randy Yates, Fixed-Point Arithmetic: An Introudction. pp6-pp11 diff --git a/fx_s1516.zip b/fx_s1516.zip deleted file mode 100644 index 70ef6a774dcd41ddffca313134466ff6361c5187..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1324 zcmWIWW@Zs#U|`^25Qq~BbSqB1P{qW+5X#EHAk4tPkX8|2Y-nm|7N3)!mkz>u$*m!= z-qDT%wc>yHyO*klo1Z;*=G+^-l}^7O$Zz0pRhl#_rrL4c0zsxn_3v-iNM*lm<(a(q z`5a5*nP)Su=&kcOxi0Vhui3wT*1Wy-uB@!$!@}3=^W~Qtm$RHWZ1?QD;64BJ-0SD> z{N#VQTIi0oe?-fIc;<QGCa2zi)Os6T)2#MQUMe!~A|Jn-^7jj0^Xz_x&fc}}wfwV; z0>jx{yUQ3icCY&%7ynPE=B3|UYnv5H{@yD?_lbOU3A8Epi&GMpH=TIAeNQT{-PD|Y z0?gtOk{KsYL^^*_Ird6(Sx52NE@5pqxx3PzoWyLJUFUfo2~Y|8q9Zs-M)cJhu?e$R zRvqWe;a4s=sJigRxn(UW1|FIl#Thn>dunZ%Be65eF;A?~b5{5CH9m1(JqM37OzA)J z!q{ky^0cN1M?1IGJF{%fSN?FxIB_)Ol|>O3!_<yAlLCPwN;3o`pG<K*#XVcAu`7II zPkEr0o|yBxS(CySFX`aCn>DG+M{@EdoeliAL-%sL$#9I!cf27WEHX#X@ruE7sqU5L zVqfxdW^^uG{KS_f&G!`x&)r5D&PCg{Y}%X|cu{>>E1T{!Cec6h9%!o;OeyZ&bjEPL zly~o`(;Ba9RDam4d%a_?cf_fKW&G-AFLPb_TD<19Z@=r3k7bPJJAU7^sW5+gt87nm z`Q@V(y|1Ip8)p1|)Rb-3y(c?e*JjDbcRVj1KfNgRZ_hdlMuCTqza84UuCQ#^?nD1q zmHsK;_^{9H-s&A!@BUk8lGp!p(LI6t=E5`drum&ecfw5U^^8{!@4aRFP{h1KxQ4sH zY5HL=x%^VO_tiI|OpPNr=kGYUfJ=t|*2(1?ERJ6`*;?~>*0QjQf6R!a`Zr1_Fk|L~ z@B&5#hKWqLl4?fjgu7XX90Xe5v))fUFgqtxda+W_!San#t`}V1@V|}K(rnSXDi$mn z612r5Q$LA!ZIl0$xqF<=?Jv1~$(nBYd9J1L#wz9bbx$3qaV41u^~T)0c63oh(<+^* z3qy7acAs=9TmEPH(%?w(F2j{dodLU79ozZGaE>s;1EyIF$63#|oEElV>U+6Uh9gtR zsdeuQK1Lh<NpJl5FLwSd(VPB}_YQxfz$BX%j*q&N)gJb&boR*dUb1J2<fD77&n27w z>aAM5V7`Onv~@?1xw=kcC_Q_T{mb1ZV~4lQ>an*&9=I_4T5GY2lc_dU#&6!6^=6LF z+w0xVZD8MGeL$RBU8>JaFGpXzV*SG#OuNip%yy0599+=;JA9GsR7t+V1qO^O@^<tu zjxNc(>3#V1;cF*et~_^`YeRn0<u4PSHDtBj7uj)=cfovZ|2g(mpRIDU&is?S`E0ZH z;&qQom~|}sL^p`1Z3qY`f9Dgn`Fidg?FX$v%X5_PKNk=1W@Hj!z*U;4FhGC;gu+&~ za4|q685txP-t|u9<0`$z2%}{Zjw}!>y2glX31&J#wq!LEwgM~z*^)~?Wf!oOUSovO bx3*p04zYxl4dhHF1}2763=9lDEFc~L>0vOb diff --git a/fx_s1516_double.c b/fx_s1516_double.c index 1acdb27..71584b1 100644 --- a/fx_s1516_double.c +++ b/fx_s1516_double.c @@ -1,47 +1,47 @@ // fx_s1516_double.c file #include "fx_s1516_double.h" -double double_to_fx(double a) { - return ((a) * P2_16); +fx_s1516 double_to_fx(double a) { + return (int)(((a) * P2_16)); } double fx_to_double(fx_s1516 a) { return ((double)(a) / P2_16); } -double fx_s1516_add(double a, double b){ +double fx_s1516_double_add(double a, double b){ return double_to_fx((a) + (b)); } -double fx_s1516_sub(double a, double b){ +double fx_s1516_double_sub(double a, double b){ return double_to_fx((a) - (b)); } -double fx_s1516_mul(double a, double b) { +double fx_s1516_double_mul(double a, double b) { return double_to_fx((a) * (b) * P2_16); } -double fx_s1516_div(double a, double b) { +double fx_s1516_double_div(double a, double b) { return double_to_fx((a) / (b) / P2_16); } -double degree_to_radian(fx_s1516 a) { - return ((a) * M_PI / 180); +double degree_to_radian(double a) { + return ((a) * fx_s1516_PI / 180); } -double fx_s1516_sin(double a) { +double fx_s1516_double_sin(double a) { return double_to_fx(sin(a * P2_16) / (P2_16)); } -double fx_s1516_sqrt(double a) { +double fx_s1516_double_sqrt(double a) { return double_to_fx(sqrt(a) / sqrt(P2_16)); } -double fx_s1516_pow(double a, double b) { +double fx_s1516_double_pow(double a, double b) { return double_to_fx(pow(a, (double)b) * pow(P2_16, (double)b - 1)); } -double fx_s1516_log(double a, double b) { +double fx_s1516_double_log(double a, double b) { return double_to_fx(baselog(a * P2_16, b) / (P2_16)); } diff --git a/fx_s1516_double.h b/fx_s1516_double.h index b65a885..ecd0b36 100644 --- a/fx_s1516_double.h +++ b/fx_s1516_double.h @@ -1,26 +1,25 @@ -#pragma once #define __FX_S1516_DOUBLE_H typedef int fx_s1516; -#include <stdio.h> #define _USE_MATH_DEFINES #include <math.h> -#define P2_16 65536.0f +#include <stdio.h> +#define P2_16 65536 +#define fP2_16 65536.0 #define e M_E #define fx_s1516_PI M_PI #define fx_s1516_INVERSE_PI 1/M_PI - -extern double double_to_fx(double a); -extern double baselog(double a, double base); -extern double fx_s1516_add(double a, double b); -extern double fx_s1516_sub(double a, double b); -extern double fx_s1516_mul(double a, double b); -extern double fx_s1516_div(double a, double b); -extern double fx_s1516_sqrt(double a); -extern double fx_s1516_pow(double a, double b); -extern double fx_s1516_log(double a, double b); -extern double degree_to_radian(fx_s1516 a); +extern fx_s1516 double_to_fx(double a); extern double fx_to_double(fx_s1516 a); -extern double fx_s1516_sin(double a); \ No newline at end of file +extern double baselog(double a, double base); +extern double fx_s1516_double_add(double a, double b); +extern double fx_s1516_double_sub(double a, double b); +extern double fx_s1516_double_mul(double a, double b); +extern double fx_s1516_double_div(double a, double b); +extern double fx_s1516_double_sqrt(double a); +extern double fx_s1516_double_pow(double a, double b); +extern double fx_s1516_double_log(double a, double b); +extern double degree_to_radian(double a); +extern double fx_s1516_double_sin(double a); diff --git a/gprof/fx_s1516_longlong.c b/fx_s1516_longlong.c similarity index 89% rename from gprof/fx_s1516_longlong.c rename to fx_s1516_longlong.c index cb8813e..8d59263 100644 --- a/gprof/fx_s1516_longlong.c +++ b/fx_s1516_longlong.c @@ -62,7 +62,7 @@ int sqrt_lut[1025] = fx_s1516 longlong_to_fx(long long a) { - return (a * 65536); + return (int)(((a) * fP2_16)); } long long fx_to_longlong(fx_s1516 a) @@ -72,7 +72,7 @@ long long fx_to_longlong(fx_s1516 a) fx_s1516 fx_s1516_longlong_mul0(fx_s1516 a, fx_s1516 b) { - return (fixed32)(((fixed64)a * b) >> 16); + return (fx_s1516)(((fixed64)a * b) >> 16); } fx_s1516 fx_s1516_longlong_mul1(fx_s1516 a, fx_s1516 b) @@ -95,33 +95,36 @@ fx_s1516 fx_s1516_longlong_mul4(fx_s1516 a, fx_s1516 b) return (fixed32)((a >> 4) * (b >> 4) >> 8); } -//mul���� (fixed) conversion ���ϸ� : ���ڰ� -1 ���� 1�� (�۰�)����ȭ �Ǿ������� ������ ������. -// fixed�� �ٿ��� ���� �غ��� -// ����Ʈ ���굵 �������� -// for ���� ���� �������� -// ���� ���� ���� �ź��� ���� ū�ű��� �� �־�� +// mul에서 (fixed) conversion 안하면 : 숫자가 -1 부터 1로 (작게)정규화 되어있으면 곱셈이 빠르다. +// fixed도 붙였다 땠다 해보고 +// 시프트 연산도 나눠보고 +// for 문도 많이 돌려보고 +// 값도 아주 작은 거부터 아주 큰거까지 다 넣어보고 -// ������ ���� : shift �������� ������ ���� 0�� �Ǿ� ������ �� �����Ƿ� �����ؾ� �Ѵ�. +// 나눗셈 연산 : shift 과정에서 나누는 수가 0이 되어 나눠질 수 있으므로 조심해야 한다. fx_s1516 fx_s1516_longlong_div0(fx_s1516 a, fx_s1516 b) { return (fixed32)(((fixed64)a << 16) / b); } -/* -* a(�������� ��)�� long long���� ij����, 16bit shift ���� �� b(������ ��)�� ���� -* long long ij����: int(32bit)�� a�� long long(64bit)�� ij���������ν� �ӵ��� ���������� 16bit shift ������ �� �� �������� �ս��� ���� �� �ִ�. -* fx_s1516_longlong�� ������ ��Ģ�����̹Ƿ� a�� b�� ����� ������ �����̰ų� �Ǽ������� ������� �� �Ҽ����� ������ �������� ��� ���������� Ŀ���� ������ �̰��� �����ϰ��� �̸� a�� 16bit shift ��Ų �� b�� ������. +/* <div0> +* a(나눠지는 수)를 long long으로 캐스팅, 16bit shift 연산 후 b(나누는 수)로 나눔 +* long long 캐스팅: int(32bit)인 a를 long long(64bit)로 캐스팅함으로써 속도가 느려지지만 +* 16bit shift 연산을 할 때 데이터의 손실을 줄일 수 있다. +* fx_s1516_longlong은 정수형 사칙연산이므로 a와 b가 비슷한 범위의 숫자이거나 +* 실수형으로 계산했을 때 소수점이 나오는 나눗셈인 경우 오차범위가 커지기 때문에 +* 이것을 방지하고자 미리 a를 16bit shift 시킨 후 b로 나눴다. */ fx_s1516 fx_s1516_longlong_div1(fx_s1516 a, fx_s1516 b) { - return (fixed32)(((a << 8) / b) << 8); // ������ �ս�, ū ���ڿ� ���ؼ��� ������ ŭ + return (fixed32)(((a << 8) / b) << 8); // ������ �ս�, ū ���ڿ� ���ؼ��� ������ ŭ } /* -* long long���� ij�������� �ʰ� int������ ������� ������ ���� �ӵ��� ������. -* ū ���� ��� �������� �ս��� ���� �� �ִ�. -* Overflow ���ɼ��� �۾�����. +* long long으로 캐스팅하지 않고 int형으로 나눠줬기 때문에 연산 속도가 빠르다. +* 큰 수일 경우 데이터의 손실이 있을 수 있다. +* Overflow 가능성은 작아진다. */ fx_s1516 fx_s1516_longlong_div2(fx_s1516 a, fx_s1516 b) @@ -130,9 +133,9 @@ fx_s1516 fx_s1516_longlong_div2(fx_s1516 a, fx_s1516 b) } /* -* div1�� ���� long long���� ij�������� �ʾұ� ������ ���� �ӵ��� ������. -* Overflow�� ��Ȯ���� ����. -* b(������ ��)�� ���� ���� ��� �������� �ս��� ũ��. +* div1과 같이 long long으로 캐스팅하지 않았기 때문에 연산 속도가 빠르다. +* Overflow 발생확률이 높다. +* b(나누는 수)가 작은 수일 경우 데이터의 손실이 크다. */ fx_s1516 fx_s1516_longlong_sin(fx_s1516 fa) diff --git a/gprof/fx_s1516_longlong.h b/fx_s1516_longlong.h similarity index 91% rename from gprof/fx_s1516_longlong.h rename to fx_s1516_longlong.h index eb2f2bf..c07d910 100644 --- a/gprof/fx_s1516_longlong.h +++ b/fx_s1516_longlong.h @@ -1,8 +1,11 @@ //fx_1516_longlong.h file -#pragma once +#define __FX_S1516_LONGLONG_H #include <stdio.h> +#define P2_16 65536 +#define fP2_16 65536.0 + typedef int fx_s1516; typedef long fixed32; typedef long long fixed64; diff --git a/fx_s1516_longlong/fx_s1516_longlong.c b/fx_s1516_longlong/fx_s1516_longlong.c deleted file mode 100644 index c8069f2..0000000 --- a/fx_s1516_longlong/fx_s1516_longlong.c +++ /dev/null @@ -1,37 +0,0 @@ -//fx_1516_longlong.c file -#include "fx_s1516_longlong.h" -#define FX32_90 0x005A0000 -#define FX32_180 0x00B40000 -#define FX32_360 0x01680000 - -// sin table -const fixed32 fx32_SinTable[92] = - { - 0,1143,2287,3429,4571,5711,6850,7986,9120,10252,11380,12504,13625,14742,15854,16961,18064,19160,20251,21336,22414,23486,24550,25606,26655, 27696,28729,29752, - 30767,31772,32768,33753,34728,35693,36647,37589,38521,39440,40347,41243,42125,42995,43852,44695,45525,46340,47142, 47929,48702,49460,50203,50931,51643,52339, - 53019,53683,54331,54963,55577,56175,56755,57319,57864,58393,58903,59395,59870,60326,60763, 61183,61583,61965,62328,62672,62997,63302,63589,63856,64103,64331, - 64540,64729,64898,65047,65176,65286,65376,65446,65496,65526,65536,65526 - }; - -fx_s1516_sin(fixed32 fa){ - int sign = 1; - fixed32 ret0, diff; - int idx; - if ( fa < 0 ) - { - sign = -1; - fa *= -1; - } - fa = fa % FX32_360; - if ( fa >= FX32_180 ) - { - sign *= -1; - fa -= FX32_180; - } - if ( fa > FX32_90 ) - fa = FX32_180 - fa; - idx = fa>>16; - ret0 = fx32_SinTable[idx]; - diff = fx32_SinTable[idx+1]-ret0; - return ( sign *( ret0 + ((diff*(fa&0xFFFF))>>16) )); -} \ No newline at end of file diff --git a/fx_s1516_longlong/fx_s1516_longlong.h b/fx_s1516_longlong/fx_s1516_longlong.h deleted file mode 100644 index af4313e..0000000 --- a/fx_s1516_longlong/fx_s1516_longlong.h +++ /dev/null @@ -1,38 +0,0 @@ -#pragma once - -typedef long fixed32; -typedef long long fixed64; - -#define mul0(a, b) (fixed32) ((fixed64)(a) * (b) >> 16) -#define mul1(a, b) (fixed32) ((a) * (b) >> 16) // no fixed -#define mul2(a, b) (fixed32) ((a>>8) * (b>>8)) -#define mul3(a, b) (fixed32) ((a>>10) * (b>>6)) -#define mul4(a, b) (fixed32) ((a>>4) * (b>>4) >> 8) - -// mul에서 (fixed) conversion 안하면 : 숫자가 -1 부터 1로 (작게)정규화 되어있으면 곱셈이 빠르다. -// fixed도 붙였다 땠다 해보고 -// 시프트 연산도 나눠보고 -// for 문도 많이 돌려보고 -// 값도 아주 작은 거부터 아주 큰거까지 다 넣어보고 - -#define div0(a, b) (fixed32)(((fixed64)(a) << 16) / (b)) -#define div1(a, b) ((((a) << 8) / (b)) << 8) -#define div2(a, b) ((a) / ((b) >> 16)) - -// 나눗셈 연산 : shift 과정에서 나누는 수가 0이 되어 나눠질 수 있으므로 조심해야 한다. - -/* <div0> -* a(나눠지는 수)를 long long으로 캐스팅, 16bit shift 연산 후 b(나누는 수)로 나눔 -* long long 캐스팅: int(32bit)인 a를 long long(64bit)로 캐스팅함으로써 속도가 느려지지만 16bit shift 연산을 할 때 데이터의 손실을 줄일 수 있다. -* fx_s1516_longlong은 정수형 사칙연산이므로 a와 b가 비슷한 범위의 숫자이거나 실수형으로 계산했을 때 소수점이 나오는 나눗셈인 경우 오차범위가 커지기 때문에 이것을 방지하고자 미리 a를 16bit shift 시킨 후 b로 나눴다. - - <div1> -* long long으로 캐스팅하지 않고 int형으로 나눠줬기 때문에 연산 속도가 빠르다. -* 큰 수일 경우 데이터의 손실이 있을 수 있다. -* Overflow 가능성은 작아진다. - - <div2> -* div1과 같이 long long으로 캐스팅하지 않았기 때문에 연산 속도가 빠르다. -* Overflow 발생확률이 높다. -* b(나누는 수)가 작은 수일 경우 데이터의 손실이 크다. -*/ \ No newline at end of file diff --git a/gprof/fx_s1516_double.c b/gprof/fx_s1516_double.c deleted file mode 100644 index 4ebe7a9..0000000 --- a/gprof/fx_s1516_double.c +++ /dev/null @@ -1,51 +0,0 @@ -// fx_s1516_double.c file -#include "fx_s1516_double.h" - -double double_to_fx(double a) { - return ((a) * P2_16); -} - -double fx_to_double(fx_s1516 a) { - return ((double)(a) / P2_16); -} - -double fx_s1516_double_add(double a, double b){ - return double_to_fx((a) + (b)); -} - -double fx_s1516_double_sub(double a, double b){ - return double_to_fx((a) - (b)); -} - -double fx_s1516_double_mul(double a, double b) { - return double_to_fx((a) * (b) * P2_16); -} - -double fx_s1516_double_div(double a, double b) { - return double_to_fx((a) / (b) / P2_16); -} - -double degree_to_radian(double a) { - return ((a) * fx_s1516_PI / 180); -} - -double fx_s1516_double_sin(double a) { - return double_to_fx(sin(a * P2_16) / (P2_16)); -} - -double fx_s1516_double_sqrt(double a) { - return double_to_fx(sqrt(a) / sqrt(P2_16)); -} - -double fx_s1516_double_pow(double a, double b) { - return double_to_fx(pow(a, (double)b) * pow(P2_16, (double)b - 1)); -} - -double fx_s1516_double_log(double a, double b) { - return double_to_fx(baselog(a * P2_16, b) / (P2_16)); -} - -double baselog(double a, double base) -{ - return log(a) / log(base); -} \ No newline at end of file diff --git a/gprof/fx_s1516_double.h b/gprof/fx_s1516_double.h deleted file mode 100644 index 7dc9671..0000000 --- a/gprof/fx_s1516_double.h +++ /dev/null @@ -1,26 +0,0 @@ -#pragma once -#define __FX_S1516_DOUBLE_H - -typedef int fx_s1516; - -#define _USE_MATH_DEFINES -#include <math.h> -#include <stdio.h> -#define P2_16 65536 -#define fP2_16 65536.0 -#define e M_E -#define fx_s1516_PI M_PI -#define fx_s1516_INVERSE_PI 1/M_PI - -extern double double_to_fx(double a); -extern double fx_to_double(fx_s1516 a); -extern double baselog(double a, double base); -extern double fx_s1516_double_add(double a, double b); -extern double fx_s1516_double_sub(double a, double b); -extern double fx_s1516_double_mul(double a, double b); -extern double fx_s1516_double_div(double a, double b); -extern double fx_s1516_double_sqrt(double a); -extern double fx_s1516_double_pow(double a, double b); -extern double fx_s1516_double_log(double a, double b); -extern double degree_to_radian(double a); -extern double fx_s1516_double_sin(double a); diff --git a/images/image-20200819214427030.png b/images/image-20200819214427030.png new file mode 100644 index 0000000000000000000000000000000000000000..452eada3fa2954e6d6594c1ab9d74ede3bdae52f GIT binary patch literal 23884 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 aAG?UnbjBDTc0L9M1_n=8KbLh*2~7YD0d{Nv literal 0 HcmV?d00001 diff --git a/images/image-20200819214731886.png b/images/image-20200819214731886.png new file mode 100644 index 0000000000000000000000000000000000000000..0744c710e2c64866534819d644f595b1ce0dfd69 GIT binary patch literal 20278 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 literal 0 HcmV?d00001 diff --git a/images/image-20200819214809542.png b/images/image-20200819214809542.png new file mode 100644 index 0000000000000000000000000000000000000000..34215be3e01a1f6059a27f82839d05e946e2e6c8 GIT binary patch literal 10956 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 literal 0 HcmV?d00001 diff --git a/images/image-20200819214821430.png b/images/image-20200819214821430.png new file mode 100644 index 0000000000000000000000000000000000000000..08ec9843ad4a990f261fcea165cf961d911d327e GIT binary patch literal 10928 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 SX*L4`1B0ilpUXO@geCwB%-1;p literal 0 HcmV?d00001 diff --git a/longtest.c b/longtest.c index 01b019a..c237d94 100644 --- a/longtest.c +++ b/longtest.c @@ -1,15 +1,17 @@ #include "fx_s1516_longlong.h" -#include <stdio.h> int main() { long long a = 3000000; long long b = 5000000; - printf("mul0 : %d\n", mul1(a, b)); - printf("mul1 : %d\n", mul1(a, b)); - printf("mul2 : %d\n", mul2(a, b)); - printf("mul3 : %d\n", mul3(a, b)); - printf("mul4 : %d\n", mul4(a, b)); + fx_s1516 fa = longlong_to_fx(a); + fx_s1516 fb = longlong_to_fx(b); + + printf("exact value: %lld, mul0 : %d, error: %lld\n", (a * b), fx_s1516_longlong_mul0(fa, fb), (a * b) - fx_to_longlong(fx_s1516_longlong_mul0(fa, fb))); + printf("mul1 : %d\n", fx_s1516_longlong_mul1(a, b)); + printf("mul2 : %d\n", fx_s1516_longlong_mul2(a, b)); + printf("mul3 : %d\n", fx_s1516_longlong_mul3(a, b)); + printf("mul4 : %d\n", fx_s1516_longlong_mul4(a, b)); } \ No newline at end of file diff --git a/test.c b/test.c index 54f23b3..6f4798c 100644 --- a/test.c +++ b/test.c @@ -1,33 +1,118 @@ -#include "fx_s1516_double.h" - -#define fx_mul(a, b) ((a)*(b)) - -/* -Make first prototype fx_sXXYY_double.c with double and math.h -define macro fx_sXXYY_double.h program test.c -*/ +#include "fx_s1516_double.h" +#include "fx_s1516_longlong.h" int main() { - fx_s1516 a = 131072; - fx_s1516 b = 65536; - - double fa = fx_to_double(a); - double fb = fx_to_double(b); - - printf("a : %d b : %d\nfa : %lf fb : %lf\noriginal a : %lf original b : %lf\n\n", a, b, fa, fb, double_to_fx(fa), double_to_fx(fb)); - - printf("Add : %-15d %lf\n", a + b, fx_s1516_add(fa, fb)); - printf("Sub : %-15d %lf\n", a - b, fx_s1516_sub(fa, fb)); - printf("Mul : %-15lld %lf\n", (long long)a * b, fx_s1516_mul(fa, fb)); - printf("Div : %-15lf %lf\n\n", (double)a / b, fx_s1516_div(fa, fb)); - - printf("Sin : %-15lf %lf\n", sin(degree_to_radian(a)), fx_s1516_sin(degree_to_radian(fa))); - printf("Sqrt : %-15lf %lf\n", sqrt(a), fx_s1516_sqrt(fa)); - printf("Sqrt : %-15lf %lf\n", sqrt(b), fx_s1516_sqrt(fb)); - printf("Pow : %-15lld %lf\n", (long long)pow(a, 2), fx_s1516_pow(fa, 2)); - printf("Log : %-15lf %lf\n\n", baselog(a, e), fx_s1516_log(fa, e)); - - printf("PI : %f\n", fx_s1516_PI); - printf("INVERSE PI : %f\n", fx_s1516_INVERSE_PI); + double sum = 0; + int i; + +#ifdef fx_mul + fx_s1516 a = 30000; + fx_s1516 b = 50000; + + double fa = fx_to_double(a); + double fb = fx_to_double(b); + + printf("fx_s1516_double_mul: %lf\n", fx_s1516_double_mul(fa, fb) / P2_16); + printf("fx_s1516_longlong_mul0: %d\n", fx_s1516_longlong_mul0(a, b)); + printf("fx_s1516_longlong_mul1: %d\n", fx_s1516_longlong_mul1(a, b)); + printf("fx_s1516_longlong_mul2: %d\n", fx_s1516_longlong_mul2(a, b)); + printf("fx_s1516_longlong_mul3: %d\n", fx_s1516_longlong_mul3(a, b)); + printf("fx_s1516_longlong_mul4: %d\n", fx_s1516_longlong_mul4(a, b)); + + for (i = 0; i < 10000000; i++) + { + sum += fx_s1516_double_mul(fa, fb); + } + for (i = 0; i < 10000000; i++) + { + sum += fx_s1516_longlong_mul0(a, b); + } + for (i = 0; i < 10000000; i++) + { + sum += fx_s1516_longlong_mul1(a, b); + } + for (i = 0; i < 10000000; i++) + { + sum += fx_s1516_longlong_mul2(a, b); + } + for (i = 0; i < 10000000; i++) + { + sum += fx_s1516_longlong_mul3(a, b); + } + for (i = 0; i < 10000000; i++) + { + sum += fx_s1516_longlong_mul4(a, b); + } +#endif + +#ifdef fx_div + fx_s1516 a = 1000000; + fx_s1516 b = 500000; + + double fa = fx_to_double(a); + double fb = fx_to_double(b); + + printf("fx_s1516_double_div: %lf\n", fx_s1516_double_div(fa, fb) * P2_16); + printf("fx_s1516_longlong_div0: %d\n", fx_s1516_longlong_div0(a, b)); + printf("fx_s1516_longlong_div1: %d\n", fx_s1516_longlong_div1(a, b)); + printf("fx_s1516_longlong_div2: %d\n", fx_s1516_longlong_div2(a, b)); + + for (i = 0; i < 10000000; i++) + { + sum += fx_s1516_double_div(fa, fb); + } + for (i = 0; i < 10000000; i++) + { + sum += fx_s1516_longlong_div0(a, b); + } + for (i = 0; i < 10000000; i++) + { + sum += fx_s1516_longlong_div1(a, b); + } + for (i = 0; i < 10000000; i++) + { + sum += fx_s1516_longlong_div2(a, b); + } +#endif + +#ifdef fx_sin + fx_s1516 a = 30; + + double fa = fx_to_double(a); + + printf("fx_s1516_double_sin: %lf\n", fx_s1516_double_sin(degree_to_radian(fa))); + printf("fx_s1516_longlong_sin: %lf\n", fx_s1516_longlong_sin(a * P2_16) / fP2_16); + + for (i = 0; i < 10000000; i++) + { + sum += fx_s1516_double_sin(degree_to_radian(fa)); + } + for (i = 0; i < 10000000; i++) + { + sum += (fx_s1516_longlong_sin(a * P2_16) / fP2_16); + } +#endif + +#ifdef fx_sqrt + fx_s1516 a = 123; + + double fa = fx_to_double(a); + + printf("fx_s1516_double_sqrt: %lf\n", fx_s1516_double_sqrt(fa)); + printf("fx_s1516_longlong_sqrt: %lf\n", fx_s1516_longlong_sqrt(a) / 256.0); + + for (i = 0; i < 10000000; i++) + { + sum += fx_s1516_double_sqrt(fa); + } + for (i = 0; i < 10000000; i++) + { + sum += (fx_s1516_longlong_sqrt(a) / 256.0); + } +#endif + + printf("sum: %lf", sum); + + return 0; } -- GitLab