diff --git a/fx_s2308_longlong.c b/fx_s2308_longlong.c index c274a357a768bb8ee22e430335ff316b1b260881..a242072a100dec4cab8b67999d209efff2d02d48 100644 --- a/fx_s2308_longlong.c +++ b/fx_s2308_longlong.c @@ -16,7 +16,7 @@ const fx_s2308 fx_s2308_SinTable[92] = }; -fx_s2308 fx_s2308_sine(fx_s2308 fa) +fx_s2308 fx_s2308_sind(fx_s2308 fa) { int sign = 1; fixed32 ret0, diff; @@ -37,5 +37,5 @@ fx_s2308 fx_s2308_sine(fx_s2308 fa) idx = fa>>8; ret0 = fx_s2308_SinTable[idx]; diff = fx_s2308_SinTable[idx+1]-ret0; - return ( sign *( ret0 + ((diff*(fa&0xFFFF))>>8))); + return ( sign *( ret0 + ((diff*(fa&0x00FF))>>8))); } diff --git a/fx_s2308_longlong.h b/fx_s2308_longlong.h index cce6b747b79afdcccfedaec865c296d47210576f..39ae85a41a61653aea72286a3ce4ea17bb112f92 100644 --- a/fx_s2308_longlong.h +++ b/fx_s2308_longlong.h @@ -13,6 +13,6 @@ typedef int fx_s2308; typedef long fixed32; -fx_s2308 fx32_sind(fx_s2308 fa); +fx_s2308 fx_s2308_sind(fx_s2308 fa); diff --git a/test.c b/test.c index 40924ab2235630eb949fc6d52cf758c5b145471b..fa2e63bcf44e2d94a5d9c73d3a045315f3baffd1 100644 --- a/test.c +++ b/test.c @@ -1,52 +1,43 @@ #include <stdio.h> +#include <math.h> #include "fx_s2308_double.h" #include "fx_s2308_longlong.h" int main() { - fx_s2308 a = 2000; - fx_s2308 b = 1000; + + double a,b; + fx_s2308 f_a,f_b; + + printf("\n======STEP 1: fx_s2308 double Test=======\n"); + printf("Please enter two double number: "); + scanf("%lf %lf", &a, &b); + f_a=DOUBLE_TO_FX(a); + f_b=DOUBLE_TO_FX(b); + printf("\n\t====== Calculation =======\n"); + printf("\n\t 1. Add: Exact answer: %lf, Fixed Point Result: %lf\n", a+b, FX_TO_DOUBLE(FX_ADD(f_a,f_b))); + printf("\n\t 2. Subtraction: Exact answer: %lf, Fixed Point Result: %lf\n", a-b, FX_TO_DOUBLE(FX_SUB(f_a,f_b))); + printf("\n\t 3. Multiplication: Exact answer: %lf, Fixed Point Result: %lf\n", a*b, FX_TO_DOUBLE(FX_MUL(f_a,f_b))); + printf("\n\t 4. Division: Exact answer: %lf, Fixed Point Result: %lf\n", a/b, FX_TO_DOUBLE(FX_DIV(f_a,f_b))); - printf("\n===Calculation: Addition===\n"); - printf("%d + %d = %d\n",a,b,FX_ADD(a,b)); - printf("\n===Calculation: Subtraction===\n"); - printf("%d - %d = %d\n",a,b,FX_SUB(a,b)); - printf("\n===Calculation: Multiplication===\n"); - printf("%d * %d = %d\n",a,b,FX_MUL(a,b)); - printf("\n===Calculation: Division===\n"); - printf("%d / %d = %d\n",a,b,FX_DIV(a,b)); - - printf("\n===Function: Sine===\n"); - double a1=30.0; - fx_s2308 f_a1=DOUBLE_TO_FX(a1); - fx_s2308 sine_a1=fx_s2308_double_sine(f_a1); - printf("sine(%f)의 fx_2308 값: %d, Double로 변환: %lf\n",a1,f_a1,FX_TO_DOUBLE(sine_a1)); - - printf("\n===Function: Sqrt===\n"); - double a2=100.0; - fx_s2308 f_a2=DOUBLE_TO_FX(a2); - fx_s2308 sqrt_a2=fx_s2308_double_sqrt(f_a2); - printf("sqrt(%f)의 fx_2308 값: %d Double로 변환: %lf\n",a2,f_a2,FX_TO_DOUBLE(sqrt_a2)); - printf("\n===Function: Power===\n"); - double a3=64.0; - fx_s2308 f_a3=DOUBLE_TO_FX(a3); - fx_s2308 pow_a3=fx_s2308_double_pow(f_a3,2.0); - printf("%f의 2.0 제곱의 fx_2308 값: %d, Double로 변환: %lf\n",a3,f_a3,FX_TO_DOUBLE(pow_a3)); - - printf("\n===Conversion: fx to double===\n"); - printf("fx_s2308 %d is changed into double %lf\n", a, FX_TO_DOUBLE(a)); - printf("\n===Conversion: fx to float===\n"); - printf("fx_s2308 %d is changed into float %f\n", a, FX_TO_FLOAT(a)); - printf("\n===Conversion: fx to int===\n"); - printf("fx_s2308 %d is changed into double %d\n", a, FX_TO_INT(a)); - printf("\n===Conversion: fx to short===\n"); - printf("fx_s2308 %d is changed into double %d\n", a, FX_TO_SHORT(a)); - - printf("\n===Constant: PI===\n"); - printf("PI의 fx_2308 값: %d\n",FX_PI); - printf("\n===Constant: Inverse PI===\n"); - printf("1/PI의 fx_2308 값: %d\n",FX_INV_PI); + printf("\n\t====== Function =======\n"); + printf("\n\t 1. Sine(%lf): Exact answer: %lf, Fixed Point Result: %lf\n", a, sin(a*(PI/180)), FX_TO_DOUBLE(fx_s2308_double_sine(f_a))); + printf("\n\t 2. Sqrt(%lf): Exact answer: %lf, Fixed Point Result: %lf\n", a, sqrt(a), FX_TO_DOUBLE(fx_s2308_double_sqrt(f_a))); + printf("\n\t 3. Power(%lf,2): Exact answer: %lf, Fixed Point Result: %lf\n", a, pow(a,2), FX_TO_DOUBLE(fx_s2308_double_pow(f_a,2))); + + printf("\n\t====== Conversion =======\n"); + printf("\n\t 1. Fx to Double: fx_s2308 %d is changed into double %lf\n", f_a, FX_TO_DOUBLE(f_a)); + printf("\n\t 2. Fx to Float: fx_s2308 %d is changed into float %f\n", f_a, FX_TO_FLOAT(f_a)); + printf("\n\t 3. Fx to Int: fx_s2308 %d is changed into int %d\n", f_a, FX_TO_INT(f_a)); + printf("\n\t 4. Fx to Short: fx_s2308 %d is changed into short %hd\n", f_a, FX_TO_SHORT(f_a)); + + printf("\n\t====== Constant =======\n"); + printf("\n\t 1. PI: PI to fx_2308: %d\n",FX_PI); + printf("\n\t 2. 1/PI: 1/PI to fx_2308: %d\n",FX_INV_PI); + printf("\n======STEP 2: fx_s2308 long long Test=======\n"); + printf("Please enter two double: "); + getchar(); double da; double db; scanf("%lf %lf", &da, &db); @@ -57,18 +48,28 @@ int main() { fb=DOUBLE_TO_FX(db); fc=fx_2308_l_mul(fa,fb); + printf("\n\t====== Multiplication =======\n"); + printf("\n\tmul1: Exact answer = %f func result = %f, error = %f\n", da*db, FX_TO_DOUBLE(fc), da*db-FX_TO_DOUBLE(fc)); + fc=fx_2308_l_mul2(fa,fb); + printf("\n\tmul2: Exact answer = %f func result = %f, error = %f\n",da*db, FX_TO_DOUBLE(fc), da*db-FX_TO_DOUBLE(fc)); + fc=fx_2308_l_mul3(fa,fb); + printf("\n\tmul3: Exact answer = %f func result = %f, error = %f\n",da*db, FX_TO_DOUBLE(fc), da*db-FX_TO_DOUBLE(fc)); + fc=fx_2308_l_mul4(fa,fb); + printf("\n\tmul4: Exact answer = %f func result = %f, error = %f\n",da*db, FX_TO_DOUBLE(fc), da*db-FX_TO_DOUBLE(fc)); + + printf("\n\t====== Division =======\n"); + fc=fx_s2308_l_div1(fa,fb); + printf("\n\t\tdiv1: Exact answer = %f func result = %f, error = %f\n",da/db, FX_TO_DOUBLE(fc), da/db-FX_TO_DOUBLE(fc)); + fc=fx_s2308_l_div2(fa,fb); + printf("\n\tdiv2: Exact answer = %f func result = %f, error = %f\n",da/db, FX_TO_DOUBLE(fc), da/db-FX_TO_DOUBLE(fc)); + + printf("\n\t====== Sine =======\n"); + printf("\n\t fx_s2308 long long sine 30 = %lf", FX_TO_DOUBLE(fx_s2308_sind(DOUBLE_TO_FX(30)))); + + - printf("Exact answer=%f func result =%f, error=%f\n", da*db, FX_TO_DOUBLE(fc), da*db-FX_TO_DOUBLE(fc)); - fc=fx_2308_l_mul2(fa,fb); - - printf("Exact answer = %f func result =%f, error=%f\n",da*db, FX_TO_DOUBLE(fc), da*db-FX_TO_DOUBLE(fc)); - - fc=fx_2308_l_mul3(fa,fb); - printf("Exact answer = %f func result =%f, error=%f\n",da*db, FX_TO_DOUBLE(fc), da*db-FX_TO_DOUBLE(fc)); - fc=fx_2308_l_mul4(fa,fb); - printf("Exact answer = %f func result =%f, error=%f\n",da*db, FX_TO_DOUBLE(fc), da*db-FX_TO_DOUBLE(fc));