diff --git a/a.out b/a.out index ff394b99890b55a2a041060b669b63eaa0a38aad..e847ac1488019bf073dd585964f3a6b6a910ef5e 100644 Binary files a/a.out and b/a.out differ diff --git a/fx_s4716_double.c b/fx_s4716_double.c index 911464df0c0b79b3b70ef73c6fb7bbddfb425cb3..94d92e6253d257154e56b581e61be2315918c229 100644 --- a/fx_s4716_double.c +++ b/fx_s4716_double.c @@ -18,11 +18,11 @@ void fx_sub(fx_s4716 a, fx_s4716 b){ } void fx_mul(fx_s4716 a, fx_s4716 b){ double mul=FX_S4716_DOUBLE_MUL(a,b); - printf("fx mul : %.16lf\n",mul); + printf("fx mul : %.16lf\n",DOUBLE_TO_FX(mul)); } void fx_div(fx_s4716 a, fx_s4716 b){ double div=FX_S4716_DOUBLE_DIV(a,b); - printf("fx div : %.16lf\n",div); + printf("fx div : %.16lf\n",DOUBLE_TO_FX(div)); } void fx_pi(){ printf("pi : %.16lf\n",FX_PI); diff --git a/fx_s4716_longlong.c b/fx_s4716_longlong.c index 2df33b0f19bd0acc23af70d926fd7ef9a8aa08df..48136a889751f7767867076b7df394333068b00a 100644 --- a/fx_s4716_longlong.c +++ b/fx_s4716_longlong.c @@ -13,31 +13,31 @@ long long fx_to_longlong(fx_s4716 a){ fx_s4716 longlong_to_fx(long long a){ return a << 16; } -fx_s4716 fx_s4716_longlong_mul(fx_s4716 a, fx_s4716 b){ +fx_s4716 fx_s4716_longlong_mul1(fx_s4716 a, fx_s4716 b){ long long result=FX_S4716_LONGLONG_MUL1(a, b); - return result; + return longlong_to_fx(result); } -fx_s4716 fx_s4716_longlong_mul1(fx_s4716 a, fx_s4716 b){ +fx_s4716 fx_s4716_longlong_mul2(fx_s4716 a, fx_s4716 b){ long long result=FX_S4716_LONGLONG_MUL2(a, b); - return result; + return longlong_to_fx(result); } -fx_s4716 fx_s4716_longlong_mul2(fx_s4716 a, fx_s4716 b){ +fx_s4716 fx_s4716_longlong_mul3(fx_s4716 a, fx_s4716 b){ long long result=FX_S4716_LONGLONG_MUL3(a, b); - return result; + return longlong_to_fx(result); } -fx_s4716 fx_s4716_longlong_div(fx_s4716 a, fx_s4716 b){ +fx_s4716 fx_s4716_longlong_div1(fx_s4716 a, fx_s4716 b){ long long result=FX_S4716_LONGLONG_DIV1(a, b); - return result; + return fx_to_longlong(result); } -fx_s4716 fx_s4716_longlong_div1(fx_s4716 a, fx_s4716 b){ +fx_s4716 fx_s4716_longlong_div2(fx_s4716 a, fx_s4716 b){ long long result=FX_S4716_LONGLONG_DIV2(a, b); - return result; + return fx_to_longlong(result); } -fx_s4716 fx_s4716_longlong_div2(fx_s4716 a, fx_s4716 b){ +fx_s4716 fx_s4716_longlong_div3(fx_s4716 a, fx_s4716 b){ long long result=FX_S4716_LONGLONG_DIV3(a, b); - return result; + return fx_to_longlong(result); } fx_s4716 fx_s4716_longlong_sin(fx_s4716 a){ long long result=sinTable[a]; - return result; + return fx_to_longlong(result); } diff --git a/fx_s4716_longlong.h b/fx_s4716_longlong.h index 572348fe1bacb5fd819171ce6b8162378f4b7034..02b8d5e0ea1e65c4ff35e41e5ef02824f025fbb0 100644 --- a/fx_s4716_longlong.h +++ b/fx_s4716_longlong.h @@ -1,7 +1,9 @@ -#define FX_S4716_LONGLONG_MUL(a, b) (((a) * (b)) >> 16) -#define FX_S4716_LONGLONG_MUL1(a, b) ((a >> 8) * (b >> 8)) -#define FX_S4716_LONGLONG_MUL2(a, b) (((a >> 4) * (b >> 4)) >> 8) +typedef long long fx_s4716; -#define FX_S4716_LONGLONG_DIV(a, b) ((a << 16) / (b)) -#define FX_S4716_LONGLONG_DIV1(a, b) (((a << 8) / (b)) << 8) -#define FX_S4716_LONGLONG_DIV2(a, b) (((a << 4) / (b >> 4)) << 8) +#define FX_S4716_LONGLONG_MUL1(a, b) (((a) * (b)) >> 16) +#define FX_S4716_LONGLONG_MUL2(a, b) ((a >> 8) * (b >> 8)) +#define FX_S4716_LONGLONG_MUL3(a, b) (((a >> 4) * (b >> 4)) >> 8) + +#define FX_S4716_LONGLONG_DIV1(a, b) ((a << 16) / (b)) +#define FX_S4716_LONGLONG_DIV2(a, b) (((a << 8) / (b)) << 8) +#define FX_S4716_LONGLONG_DIV3(a, b) (((a << 4) / (b >> 4)) << 8) diff --git a/test.c b/test.c index 29fcaa3068dc1abac5cb2045dd9028667763035a..ae437d6cb4249cbd94e6884e39768fca162d8582 100644 --- a/test.c +++ b/test.c @@ -13,6 +13,16 @@ extern void fx_inv_pi(); extern void fx_sqrt(fx_s4716 a); extern void fx_pow(fx_s4716 a); extern void fx_sine(fx_s4716 a); +extern fx_s4716 longlong_to_fx(long long a); +extern long long fx_to_longlong(fx_s4716 a); +extern fx_s4716 fx_s4716_longlong_mul1(fx_s4716 a, fx_s4716 b); +extern fx_s4716 fx_s4716_longlong_mul2(fx_s4716 a, fx_s4716 b); +extern fx_s4716 fx_s4716_longlong_mul3(fx_s4716 a, fx_s4716 b); +extern fx_s4716 fx_s4716_longlong_div1(fx_s4716 a, fx_s4716 b); +extern fx_s4716 fx_s4716_longlong_div2(fx_s4716 a, fx_s4716 b); +extern fx_s4716 fx_s4716_longlong_div3(fx_s4716 a, fx_s4716 b); +extern fx_s4716 fx_s4716_longlong_sin(fx_s4716 a); + int main() { @@ -33,76 +43,76 @@ int main() else if(option == 1) { 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 get sine value \n"); - printf("11. quit\n\n"); + printf("1. add \n"); + printf("2. subtract \n"); + printf("3. multiply \n"); + printf("4. divide \n"); + printf("5. square root \n"); + printf("6. power \n"); + printf("7. print PI \n"); + printf("8. print inverse PI \n"); + printf("9. fix to double \n"); + printf("10. double to fix \n"); + printf("11. get sine value \n"); + printf("0. quit\n\n"); while (1) { printf("Type option : "); fflush(stdout); scanf("%d", &option); switch (option) { - case 0: + case 1: printf("Input two number : "); fflush(stdout); scanf("%lld %lld", &a, &b); fx_add(a, b); break; - case 1: + case 2: printf("Input two number : "); fflush(stdout); scanf("%lld %lld", &a, &b); fx_sub(a, b); break; - case 2: + case 3: printf("Input two number : "); fflush(stdout); scanf("%lld %lld", &a, &b); fx_mul(a, b); break; - case 3: + case 4: printf("Input two number : "); fflush(stdout); scanf("%lld %lld", &a, &b); fx_div(a, b); break; - case 4: + case 5: printf("Input one number : "); fflush(stdout); scanf("%lld", &a); fx_sqrt(a); break; - case 5: + case 6: printf("Input one number : "); fflush(stdout); scanf("%lld", &a); fx_pow(a); break; - case 6: + case 7: fx_pi(); break; - case 7: + case 8: fx_inv_pi(); break; - case 8: + case 9: printf("Input fix number : "); fflush(stdout); scanf("%lld", &a); fx_to_double(a); break; - case 9: + case 10: printf("Input double number : "); fflush(stdout); scanf("%lf", &c); double_to_fx(c); break; - case 10: + case 11: printf("Input one number : "); fflush(stdout); scanf("%lld", &a); fx_sine(a); break; - case 11: + case 0: quit = 1; default: break; @@ -131,21 +141,22 @@ int main() case 1 : printf("Input two number : "); fflush(stdout); scanf("%lld %lld", &a, &b); - t = fx_s4716_longlong_mul(a,b); - tt = fx_s4716_longlong_mul1(a,b); - ttt = fx_s4716_longlong_mul2(a,b); + t = fx_s4716_longlong_mul1(a,b); + tt = fx_s4716_longlong_mul2(a,b); + ttt = fx_s4716_longlong_mul3(a,b); printf("%lld %lld %lld\n", t, tt, ttt); break; case 2 : printf("Input two number : "); fflush(stdout); scanf("%lld %lld", &a, &b); - t = fx_s4716_longlong_div(a,b); - tt = fx_s4716_longlong_div1(a,b); - ttt = fx_s4716_longlong_div2(a,b); + t = fx_s4716_longlong_div1(a,b); + tt = fx_s4716_longlong_div2(a,b); + ttt = fx_s4716_longlong_div3(a,b); printf("%lld %lld %lld\n", t, tt, ttt); break; } } } + else {} } \ No newline at end of file