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