From c8cc2c907db865d818e2be998085cc7cbe079921 Mon Sep 17 00:00:00 2001
From: esangbaek <esangbaek@ajou.ac.kr>
Date: Wed, 5 Aug 2020 23:46:12 +0900
Subject: [PATCH] test fx

---
 fx_s4716_double.c |  42 ++++++++++++++++++++++
 fx_s4716_double.h |  37 +++++++++++++------
 fx_s4716_double.o | Bin 0 -> 2382 bytes
 test.c            |  88 ++++++++++++++++++++++++++++++++++++++++++++++
 test.o            | Bin 0 -> 3244 bytes
 5 files changed, 157 insertions(+), 10 deletions(-)
 create mode 100644 fx_s4716_double.c
 create mode 100644 fx_s4716_double.o
 create mode 100644 test.c
 create mode 100644 test.o

diff --git a/fx_s4716_double.c b/fx_s4716_double.c
new file mode 100644
index 0000000..18857a9
--- /dev/null
+++ b/fx_s4716_double.c
@@ -0,0 +1,42 @@
+#include<stdio.h>
+#include"fx_s4716_double.h"
+#define _USE_MATH_DEFINES
+
+void fx_to_double(fx_s4716 a){
+    double f2d=FX_TO_DOUBLE(a);
+    printf("fx to double: %.16lf\n",f2d);
+}
+void double_to_fx(double a){
+    double d2f=DOUBLE_TO_FX(a);
+    printf("double to fx: %.16lf\n",d2f);
+}
+void fx_add(fx_s4716 a, fx_s4716 b){
+    double add=FX_S4716_DOUBLE_ADD(a,b);
+    printf("fx add: %.16lf\n",add);
+}
+void fx_sub(fx_s4716 a, fx_s4716 b){
+    double sub=FX_S4716_DOUBLE_SUB(a,b);
+    printf("fx sub : %.16lf\n",sub);
+}
+void fx_mul(fx_s4716 a, fx_s4716 b){
+    double mul=FX_S4716_DOUBLE_MUL(a,b);
+    printf("fx mul : %.16lf\n",mul);
+}
+void fx_div(fx_s4716 a, fx_s4716 b){
+    double div=FX_S4716_DOUBLE_DIV(a,b);
+    printf("fx div : %.16lf\n",div);
+}
+void fx_pi(){
+    printf("pi : %.16lf\n",FX_PI);
+}
+void fx_inv_pi(){
+    printf("inverse pi : %.16lf\n",FX_INV_PI);
+}
+void fx_sqrt(fx_s4716 a){
+    double square=FX_S4716_DOUBLE_SQRT(a);
+    printf("fx sqrt : %.16lf\n",square);
+}
+void fx_pow(fx_s4716 a){
+    double power=FX_S4716_DOUBLE_POW(a);
+    printf("fx pow : %.16lf\n",power);
+}
diff --git a/fx_s4716_double.h b/fx_s4716_double.h
index d9c5165..1198721 100644
--- a/fx_s4716_double.h
+++ b/fx_s4716_double.h
@@ -1,19 +1,36 @@
 #include <math.h>
 
+// #define f_POWER_2_16 65536.0
+
+// #define fx_to_double(a) a/f_POWER_2_16
+// #define double_to_fx(a) (long long)(a*f_POWER_2_16)
+
+// #define fx_s4716_double_add(a, b) ((a)+(b))
+// #define fx_s4716_double_sub(a, b) ((a)-(b))
+// #define fx_s4716_double_mul(a, b) (double_to_fx(fx_to_double(a)*fx_to_double(b))
+// #define fx_s4716_double_div(a, b) (double_to_fx(fx_to_double(a)/fx_to_double(b))
+
+// #define fx_PI double_to_fx(3.141592653)
+// #define fx_s4716_double_sqrt(a) (sqrt(a)/(f_POWER_2_16/2))
+// #define fx_s4716_double_pow(a) (pow((double)a, 2.0)*f_POWER_2_16)
+
 typedef long long fx_s4716;
 
 
-#define f_POWER_2_16 65536.0
+#define F_POWER_2_16 65536.0
+#define F_POWER_2_8 256.0
 
-#define fx_to_double(a) a/f_POWER_2_16
-#define double_to_fx(a) (long long)(a*f_POWER_2_16)
+#define FX_TO_DOUBLE(a) (a)/(F_POWER_2_16)
+#define DOUBLE_TO_FX(a) ((a)*(F_POWER_2_16))
+//#define DOUBLE_TO_FX(a) (long long)((a)*(F_POWER_2_16))
 
-#define fx_s4716_double_add(a, b) ((a)+(b))
-#define fx_s4716_double_sub(a, b) ((a)-(b))
-#define fx_s4716_double_mul(a, b) (double_to_fx(fx_to_double(a)*fx_to_double(b))
-#define fx_s4716_double_div(a, b) (double_to_fx(fx_to_double(a)/fx_to_double(b))
+#define FX_S4716_DOUBLE_ADD(a, b) ((a)+(b))
+#define FX_S4716_DOUBLE_SUB(a, b) ((a)-(b))
+#define FX_S4716_DOUBLE_MUL(a, b) (DOUBLE_TO_FX((FX_TO_DOUBLE(a))*(FX_TO_DOUBLE(b))))
+#define FX_S4716_DOUBLE_DIV(a, b) (DOUBLE_TO_FX((FX_TO_DOUBLE(a))/(FX_TO_DOUBLE(b))))
 
-#define fx_PI double_to_fx(3.141592653)
-#define fx_s4716_double_sqrt(a) (sqrt(a)/(f_POWER_2_16/2))
-#define fx_s4716_double_pow(a) (pow((double)a, 2.0)*f_POWER_2_16)
+#define FX_PI (DOUBLE_TO_FX(M_PI))
+#define FX_INV_PI (DOUBLE_TO_FX(1/(M_PI)))
+#define FX_S4716_DOUBLE_SQRT(a) ((sqrt(a))/(F_POWER_2_8))
+#define FX_S4716_DOUBLE_POW(a) ((pow((double)a, 2.0))*(F_POWER_2_16))
 
diff --git a/fx_s4716_double.o b/fx_s4716_double.o
new file mode 100644
index 0000000000000000000000000000000000000000..51177c504aa38ff4006479932c132d7f2200f5ca
GIT binary patch
literal 2382
zcmeZaWMcpUId%pHX%K^fg;B30wW0*fh7bu%3=Axc3=A!-5WWHf1A_vCL4saNVo4%I
z2q)>lU~oV$skj)Y0;og-NL>-Cfd?2E7*d#_3ZRq&gM)*<36uk+R2Uc-R9K)KDCNLl
z;Gl143gtm48%72O4;BW7BM>h$a56A3fYgO{K5c$u(e297>H47Cm8aA7$^G01cUc!O
zFfiQvc{ldMUDpqHV^mm<vw$pOcmXnO!pXy!y6(Edbe%-eCC0#jtSh+rjSI46-L3+i
zt~a_}MLJ#Ybo)N&j(yVYdZRn^4&y<=%bmU#I%BWg&%J<Rpbp%?<|8iAu@I+t;55_q
zL3ijAZPy#pp?5l6FLZ`tm}dhw51Y4;-G>w~_j7N+!sy;fC=1o!zLXmK6RWXt=*CLi
zWnIC*zyOV-d~|7yn3Yih$KhSp4VW=pLr^#C4v1YGcj4xMQwplz`;g2@t57J(S4hb(
zP0C5NQc%@1G|NfjVu0{LGHDeE(X<MM#FP{iesO7%0*XLxX%4DDN@f|7KtU!FC#^!E
zxUi@MRiq%l97zC_o*5VzJ~&9|x`g~z<aC4xJaB-}3=Zzj&Q=N<zL|OM;d=Q+=?d=7
z&I(SYnK>!CMw$widPaH%3=ASr#f()!42(4#jM6+TEFFvt3^EK549cEnAT^GB9IZ@F
zysSk>d01E=a-igA#lXOTO&(O%#4s>06fiI_gd*#AX=Y~fIqV2B1!PA90|UcR1_lNn
zWHn44AZf50Kv5*f$iNVeA|DKw2bDD$c;p{2Ffi<AWMGg-)*lVl4mO{Gk%8eJBLjmS
zvV0XnUI7#qObiSj$ns1sU<Kj~3=BdH3=C`xT5y&=0|SEu11MZUxd<Yg0GCaL%Wi~=
zZG($3GQ!MbV}zMv02i}{vs~e<2skSiuA?0;HVMv}181#=v$nu>9EOXXgR?HfWj`}A
zFi3)Z^b;=2!vu4wAQQ}``fxF8CI$v6untGKSO}aI3D*HiBRpVrpd<@nfx-&HYGGht
zfUuUpSx4ZkCvX<1hJ&b6VT9?>OUujwg*7PB{{3fQNM}r|h%YuVH#CcfWM92xkQCTo
zAO<6Y0s|8xh=qyOp(z}!h9N$!B0e!Cg&~K5fdL^>T$;pi5Je=nG>3tg5m`-2W*I{Y
zibz2w1H*0<5m1)Dg(6arU(O)G1TzP@h6g#9nGsaSgTfKvZsgjXiGhKE8Ke*)4Q3(N
z?4XJos~V(Q9aIW1GlKFOSUU;<tE)kc3}!}U6ge0N6u%%gr~+qZ1l8xDIvgYd!SMw}
znRz8?5Dq9V7~(-e0p){QEldpYprAkz@nT?L&;z?trK+lmK`%8UKCLJ*Hx(R7CHc^(
QW`NT1CHe7b71%WZ06mJ^y#N3J

literal 0
HcmV?d00001

diff --git a/test.c b/test.c
new file mode 100644
index 0000000..c97a074
--- /dev/null
+++ b/test.c
@@ -0,0 +1,88 @@
+#include<stdio.h>
+#include "fx_s4716_double.h"
+
+extern void fx_to_double(fx_s4716 a);
+extern void double_to_fx(double a);
+extern void fx_add(fx_s4716 a, fx_s4716 b);
+extern void fx_sub(fx_s4716 a, fx_s4716 b);
+extern void fx_mul(fx_s4716 a, fx_s4716 b);
+extern void fx_div(fx_s4716 a, fx_s4716 b);
+extern void fx_pi();
+extern void fx_inv_pi();
+extern void fx_sqrt(fx_s4716 a);
+extern void fx_pow(fx_s4716 a);
+
+int main()
+{
+    fx_s4716 a,b;
+    double c;
+    int option;
+    printf("This is program to test fixed point arithmetic\n");
+    printf("   OPTION \n");
+    printf("0. add \n");
+    printf("1. subtract \n");
+    printf("2. multiply \n");
+    printf("3. divide \n");
+    printf("4. square root \n");
+    printf("5. power \n");
+    printf("6. print PI \n");
+    printf("7. print inverse PI \n");
+    printf("8. fix to double \n");
+    printf("9. double to fix \n");
+    printf("10. quit\n\n");
+
+    printf("Type option : ");
+    fflush(stdout);
+    scanf("%d", &option);
+    switch (option)
+    {
+    case 0:
+        printf("Input two number : "); fflush(stdout);
+        scanf("%lld %lld", &a, &b);
+        fx_add(a, b);
+        break;
+    case 1:
+        printf("Input two number : "); fflush(stdout);
+        scanf("%lld %lld", &a, &b);
+        fx_sub(a, b);
+        break;
+    case 2:
+        printf("Input two number : "); fflush(stdout);
+        scanf("%lld %lld", &a, &b);
+        fx_mul(a, b);
+        break;
+    case 3:
+        printf("Input two number : "); fflush(stdout);
+        scanf("%lld %lld", &a, &b);
+        fx_div(a, b);
+        break;
+    case 4:
+        printf("Input one number : "); fflush(stdout);
+        scanf("%lld", &a);
+        fx_sqrt(a);
+        break;
+    case 5:
+        printf("Input one number : "); fflush(stdout);
+        scanf("%lld", &a);
+        fx_pow(a);
+        break;
+    case 6:
+        fx_pi();
+        break;
+    case 7:
+        fx_inv_pi();
+        break;
+    case 8:
+        printf("Input fix number : "); fflush(stdout);
+        scanf("%lld",&a);
+        fx_to_double(a);
+        break;
+    case 9:
+        printf("Input double number : "); fflush(stdout);
+        scanf("%lf",&c);
+        double_to_fx(c);
+        break;
+    default:
+        break;
+    }
+}
\ No newline at end of file
diff --git a/test.o b/test.o
new file mode 100644
index 0000000000000000000000000000000000000000..a2db3710d01d794756c76d0ec0572b031ae8d9e9
GIT binary patch
literal 3244
zcmeZaWMcpU4K4--c@Tqvg;B30wW0*fh7dED85md?85kTON*N*<7#I{73=;HG5=#;x
zN^p`63<d}El8TFQDu7BffYcSC8tB5vz%Yk}fngUXL=hJQ1A_yDfrGvYgbyQC7#J8H
zu)=r{8m!LH6vBa$HVh05ENl!6av*~k7#J9#=7n}X4Q_t&q4|x$3y{j=EFc3JU~Fy%
z1~^+7iLHRd)<t4lAhA7=*g;6_cqBF`q+xcoA&JjGVlRTR7lItvd_bX-MFp&<*F{C7
z(?x~lIE%_gn3`@E6_Ms2oc!%;nHU(lSz2Wn85sUQIL@N71*QUvDGHq~DjdBoDjHDJ
zPQcW5`=}^%$Ec`uyQpY%hp6au`lxVp#;EXgvZ!>1sIY)t@zR}%fq|wLJY%G>1+BEU
zKm}sKC0Mv(i33>JKZB`(hdFXs-(~;@1?2`!f?4yj17hTBm;kwMd+l_bMdd#pQzW3N
zON<ekr|!C_NZgfyq~+Hv6J9e;*a1r6-LZd89-g3}px_@6;_2_Fz+j-KkeHI9z+kAS
zP+Xc+Qk0lnqQGFJr;uBkQ<7PbQ>nmUtf!EYS(cfSs=#2Pr%+s2npl*oP?VovqQGFP
zr%;ezo?4{9V5X-~P?VWhq7dMzz+evJWagEn78R$01ugUx(lRR)O7ay_@=KF)QWY31
z^<d1Be6SpYp@E)4YDH!V7eh#8L8?N2K}lwQo`RJEgK7$cXI?>Ri9$(vzCvDUZc=Iy
zSU4vqML{(u2PT`Jmx?9})dsQ|p$%db)ENk2)tod228O2$3=D3J3=GQ|85lU27#K2{
z7#KD&F);jQVqoZDW?*1tW?=AUW?*o4cD7Q`@XgF~57)~tN>^}qc2;mI&CE&BHPTeD
z)HBjEU|<jd1v#iZtO{aatl?mk=3!y!U<8%%3=A@$GLwOUVLCGd1A`+UM=O&PFRObq
zGjk8~(Zf6}ETGa+fB|HN5Ca1Ps9<Gd5NBXu0P#c^<lth;a4{{om_A(03@&C37juG(
zxx>Z$;9|jWu_(A0s8og63ko5KTe9Kmis0(X;bL`gv1Yhf7hJ3#E;bD=HXAMmDw830
zEN5U~0M!g43~Lw|7z7y@7}yxLgTn+AF2~?{Pctwuh=RrM!^J@5C&ZMua8o|PP5BE}
z4KhW95f-|Vj4)Gd85tPFz$!f9vVM#(w*)i7+!DtKG6953;p(d3rp#kx0LPdJ!z#G!
zdblZD;HK<{n{o}V?l#<%|BMU_5@5G*Gr?Rczyx!PC=<*r3QQn(fUr4SoedMrM+r;}
z43c0|a^SLsa8t_QrZmD$nE+Qe6>iE(CI$v6uqj*Nvb*4>?1!6j3U10xxVn3AQ$8^<
zFi3+<`NIUs2O<m{%rL+4GQ<2P#0>MBEHlVoAglvdXUGimn=3N|gDluQKe%i#+>{8o
zDamkCis0(X;ifb*Gk|lI2m`2EX91@*1x5x22n$rnKv)`ZF&#L|0M0Ujvn=2&8#v1W
z&H}Y@K<0@s=%r=mq(aMyfBzX6(iuxqi%ay9p+aCPJ~uHl56l9!trQrTKn*M?A4Va!
zEkV-EjG&SQ)S`r`U|>LQS28g$FffA@BBa4A<TfR!Xu_%nsXYnu1v4Y4MG4AnU?boJ
zD8+#|pe7_UBdDYT@lY|iNeB*Ykb6KaNmNJ0$0Pe*fdS-h1_nJOLzo!i3rb564PlU)
zcyMh5Dy={Y!6IpCIi<xJATGF-&BPF2oSc{kQ^EjIQxTt-l7g%zts=g-Gzm>4w=@S$
zBqg&9O{BQ62-E<D*_BoiUyu(fA3@4sb`@lTcpwZC0nt_<0*qlIpq4IJ0PMmr1_lN_
zaOkU4RaG(QrDnvZ6(#1TVi$~$&&(}|kB`sHPhyBqtB5bjkB8KH3{V;*l2*Y004)FG
An*aa+

literal 0
HcmV?d00001

-- 
GitLab