diff --git a/combination.h b/combination.h
index 9899df7044e889b19e229ad65a8f5a9323e48b8c..f3daed48307f71164f5e0e069cf402d842fd55b9 100644
--- a/combination.h
+++ b/combination.h
@@ -21,8 +21,8 @@
 #define _FX_DOUBLE 10
 #define _FX_LONGLONG 11
 
-#define _FX_SYSTEM _FX_S2308
-#define _FX_CALCULATION_TYPE _FX_DOUBLE
+#define _FX_SYSTEM _FX_S3231
+#define _FX_CALCULATION_TYPE _FX_LONGLONG
 
 #if _FX_SYSTEM == _FX_S1516 || _FX_SYSTEM == _FX_S1615 || _FX_SYSTEM == _FX_S2308
     #if _FX_CALCULATION_TYPE == _FX_DOUBLE
@@ -38,23 +38,14 @@
     #endif
 #endif
 
-#if FX_SYSTEM == _FX_S1516
-    #define tmp 0
-#elif FX_SYSTEM == _FX_S1615
-    #define tmp 1
-#elif FX_SYSTEM == _FX_S2308
-    #define tmp 2
-#elif FX_SYSTEM == _FX_S3132
-    #define tmp 3
-#elif FX_SYSTEM == _FX_S3231
-    #define tmp 4
-#elif FX_SYSTEM == _FX_S4716
-    #define tmp 5
-#endif
-
 #if _FX_SYSTEM == _FX_S1516 && _FX_CALCULATION_TYPE == _FX_DOUBLE
+    #define fx_add(a, b) fx_s1516_double_add(a, b)
+    #define fx_sub(a, b) fx_s1516_double_sub(a, b)
     #define fx_mul(a, b) fx_s1516_double_mul(a, b)
     #define fx_div(a, b) fx_s1516_double_div(a, b)
+    #define fx_sqrt(a) fx_s1516_double_sqrt(a)
+    #define fx_pow(a, b) fx_s1516_double_pow(a, b)
+    #define fx_log(a, b) fx_s1516_double_log(a, b)
 #endif
 
 #if _FX_SYSTEM == _FX_S1516 && _FX_CALCULATION_TYPE == _FX_LONGLONG
@@ -64,25 +55,38 @@
     #define fx_div1(a, b) fx_s1516_longlong_div0(a, b)
     #define fx_div2(a, b) fx_s1516_longlong_div1(a, b)
     #define fx_div3(a, b) fx_s1516_longlong_div2(a, b)
+    #define fx_sin(a) fx_s1516_longlong_sin(a, b)
+    #define fx_sqrt(a) fx_s1516_longlong_sqrt(a, b)
 #endif
 
 #if _FX_SYSTEM == _FX_S1615 && _FX_CALCULATION_TYPE == _FX_DOUBLE
+    #define fx_add(a, b) fx_s1615_double_add(a, b)
+    #define fx_sub(a, b) fx_s1615_double_sub(a, b)
     #define fx_mul(a, b) fx_s1615_double_mul(a, b)
     #define fx_div(a, b) fx_s1615_double_div(a, b)
+    #define fx_sin(a) sine_fx_s1615_int(a)
+    #define fx_sqrt(a) sqrt_fx_s1615_int(a)
+    #define fx_pow(a, b) power_fx_s1615_int(a, b)
 #endif
 
 #if _FX_SYSTEM == _FX_S1615 && _FX_CALCULATION_TYPE == _FX_LONGLONG
-    #define fx_mul1(a, b) fx_s1516_longlong_mul1(a, b)
-    #define fx_mul2(a, b) fx_s1516_longlong_mul2(a, b)
-    #define fx_mul3(a, b) fx_s1516_longlong_mul3(a, b)
-    #define fx_div1(a, b) fx_s1516_longlong_div1(a, b)
-    #define fx_div2(a, b) fx_s1516_longlong_div2(a, b)
-    #define fx_div3(a, b) fx_s1516_longlong_div3(a, b)
+    #define fx_mul1(a, b) fx_s1615_longlong_mul1(a, b)
+    #define fx_mul2(a, b) fx_s1615_longlong_mul2(a, b)
+    #define fx_mul3(a, b) fx_s1615_longlong_mul3(a, b)
+    #define fx_div1(a, b) fx_s1615_longlong_div1(a, b)
+    #define fx_div2(a, b) fx_s1615_longlong_div2(a, b)
+    #define fx_div3(a, b) fx_s1615_longlong_div3(a, b)
+    #define fx_sin(a) sine_fx_s1615_longlong(a)
 #endif
 
 #if _FX_SYSTEM == _FX_S2308 && _FX_CALCULATION_TYPE == _FX_DOUBLE
+    #define fx_add(a, b) fx_s2308_double_add(a, b)
+    #define fx_sub(a, b) fx_s2308_double_sub(a, b)
     #define fx_mul(a, b) fx_s2308_double_mul(a, b)
     #define fx_div(a, b) fx_s2308_double_div(a, b)
+    #define fx_sin(a) fx_s2308_double_sine(a)
+    #define fx_sqrt(a) fx_s2308_double_sqrt(a)
+    #define fx_pow(a, b) fx_s2308_double_pow(a, b)
 #endif
 
 #if _FX_SYSTEM == _FX_S2308 && _FX_CALCULATION_TYPE == _FX_LONGLONG
@@ -92,11 +96,18 @@
     #define fx_mul4(a, b) fx_s2308_longlong_mul4(a, b)
     #define fx_div1(a, b) fx_s2308_longlong_div1(a, b)
     #define fx_div2(a, b) fx_s2308_longlong_div2(a, b)
+    #define fx_div3(a, b) a
+    #define fx_sin(a) fx_s2308_sind(a)
 #endif
 
 #if _FX_SYSTEM == _FX_S3132 && _FX_CALCULATION_TYPE == _FX_DOUBLE
+    #define fx_add(a, b) fx_s3132_double_add(a, b)
+    #define fx_sub(a, b) fx_s3132_double_sub(a, b)
     #define fx_mul(a, b) fx_s3132_double_mul(a, b)
     #define fx_div(a, b) fx_s3132_double_div(a, b)
+    #define fx_sin(a) fx_s3132_double_sine(a)
+    #define fx_sqrt(a) fx_s3132_double_sqrt(a)
+    #define fx_pow(a, b) fx_s3132_double_power(a, b)
 #endif
 
 #if _FX_SYSTEM == _FX_S3132 && _FX_CALCULATION_TYPE == _FX_LONGLONG
@@ -106,11 +117,17 @@
     #define fx_div1(a, b) fx_s3132_longlong_div1(a, b)
     #define fx_div2(a, b) fx_s3132_longlong_div2(a, b)
     #define fx_div3(a, b) fx_s3132_longlong_div3(a, b)
+    #define fx_sin(a) fx32_sind(a)
 #endif
 
 #if _FX_SYSTEM == _FX_S3231 && _FX_CALCULATION_TYPE == _FX_DOUBLE
+    #define fx_add(a, b) fx_s3231_double_add(a, b)
+    #define fx_sub(a, b) fx_s3231_double_sub(a, b)
     #define fx_mul(a, b) fx_s3231_double_mul(a, b)
     #define fx_div(a, b) fx_s3231_double_div(a, b)
+    #define fx_sin(a) fx_3231_double_sin(a)
+    #define fx_sqrt(a) fx_3231_double_sqrt(a)
+    #define fx_pow(a, b) fx_3231_double_power(a, b)
 #endif
 
 #if _FX_SYSTEM == _FX_S3231 && _FX_CALCULATION_TYPE == _FX_LONGLONG
@@ -120,11 +137,17 @@
     #define fx_div1(a, b) fx_s3231_longlong_div1(a, b)
     #define fx_div2(a, b) fx_s3231_longlong_div2(a, b)
     #define fx_div3(a, b) fx_s3231_longlong_div3(a, b)
+    #define fx_sin(a) fx_3231_longlong_sin(a)
 #endif
 
 #if _FX_SYSTEM == _FX_S4716 && _FX_CALCULATION_TYPE == _FX_DOUBLE
+    #define fx_add(a, b) fx_s4716_double_add(a, b)
+    #define fx_sub(a, b) fx_s4716_double_sub(a, b)
     #define fx_mul(a, b) fx_s4716_double_mul(a, b)
     #define fx_div(a, b) fx_s4716_double_div(a, b)
+    #define fx_sqrt(a) fx_s4716_double_sqrt(a)
+    #define fx_pow(a) fx_s4716_double_pow(a)
+    #define fx_sin(a) fx_s4716_double_sin(a)
 #endif
 
 #if _FX_SYSTEM == _FX_S4716 && _FX_CALCULATION_TYPE == _FX_LONGLONG
@@ -134,4 +157,9 @@
     #define fx_div1(a, b) fx_s4716_longlong_div1(a, b)
     #define fx_div2(a, b) fx_s4716_longlong_div2(a, b)
     #define fx_div3(a, b) fx_s4716_longlong_div3(a, b)
-#endif
\ No newline at end of file
+    #define fx_sin(a) a
+#endif
+
+// #define fx_log(a, b) a
+// #define fx_sin(a) a
+// #define fx_sqrt(a, b) a
\ No newline at end of file
diff --git a/fx_s1516_double.c b/fx_s1516_double.c
index f3bccb86b1ebfe03c2ed4b2fcd595060d15958a0..6168c7a2161dd7e13c7e00281724436a494f95d5 100644
--- a/fx_s1516_double.c
+++ b/fx_s1516_double.c
@@ -1,12 +1,12 @@
 // fx_s1516_double.c file
 #include "fx_s1516_double.h"
 
-fx_s1516 double_to_fx(double a)
+fx_s1516 double_to_fx_s1516(double a)
 {
     return (int)(((a)*P2_16));
 }
 
-double fx_to_double(fx_s1516 a)
+double fx_s1516_to_double(fx_s1516 a)
 {
     return ((double)(a) / P2_16);
 }
diff --git a/fx_s1516_double.h b/fx_s1516_double.h
index 35fcf6da524e3748afbb4a3492067f85d5198d54..48930327429eecbaf442f91307de2058e170eaa4 100644
--- a/fx_s1516_double.h
+++ b/fx_s1516_double.h
@@ -11,8 +11,8 @@ typedef int fx_s1516;
 #define fx_s1516_PI M_PI
 #define fx_s1516_INVERSE_PI 1 / M_PI
 
-extern fx_s1516 double_to_fx(double a);
-extern double fx_to_double(fx_s1516 a);
+extern fx_s1516 double_to_fx_s1516(double a);
+extern double fx_s1516_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);
diff --git a/fx_s1516_longlong.c b/fx_s1516_longlong.c
index b002fd00ec3e0def798c95a07e14dbb8db900835..bf02882fa9e7547a08ab5ec3ba9d9e80850315c4 100644
--- a/fx_s1516_longlong.c
+++ b/fx_s1516_longlong.c
@@ -6,7 +6,7 @@
 #define FX32_360 0x01680000
 
 // sin table
-const fixed32 fx32_SinTable[92] =
+const fixed32 fx32_SinTable1[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,
@@ -58,12 +58,12 @@ int sqrt_lut[1025] =
         0x1F563DB7, 0x1F5A531E, 0x1F5E67FD, 0x1F627C54, 0x1F669024, 0x1F6AA36C, 0x1F6EB62D, 0x1F72C866, 0x1F76DA19, 0x1F7AEB45, 0x1F7EFBEB, 0x1F830C0B, 0x1F871BA4, 0x1F8B2AB8, 0x1F8F3946, 0x1F93474E, 0x1F9754D1, 0x1F9B61D0, 0x1F9F6E49, 0x1FA37A3E, 0x1FA785AE, 0x1FAB909A, 0x1FAF9B02, 0x1FB3A4E7,
         0x1FB7AE47, 0x1FBBB724, 0x1FBFBF7E, 0x1FC3C755, 0x1FC7CEA9, 0x1FCBD57A, 0x1FCFDBC9, 0x1FD3E196, 0x1FD7E6E0, 0x1FDBEBA9, 0x1FDFEFEF, 0x1FE3F3B5, 0x1FE7F6F9, 0x1FEBF9BC, 0x1FEFFBFD, 0x1FF3FDBF, 0x1FF7FEFF, 0x1FFBFFBF, 0x20000000};
 
-fx_s1516 longlong_to_fx(long long a)
+fx_s1516 longlong_to_fx_s1516(long long a)
 {
     return (int)(((a)*fP2_16));
 }
 
-long long fx_to_longlong(fx_s1516 a)
+long long fx_s1516_to_longlong(fx_s1516 a)
 {
     return (a / 65536);
 }
@@ -155,8 +155,8 @@ fx_s1516 fx_s1516_longlong_sin(fx_s1516 fa)
     if (fa > FX32_90)
         fa = FX32_180 - fa;
     idx = fa >> 16;
-    ret0 = fx32_SinTable[idx];
-    diff = fx32_SinTable[idx + 1] - ret0;
+    ret0 = fx32_SinTable1[idx];
+    diff = fx32_SinTable1[idx + 1] - ret0;
     return (fixed32)(sign * (ret0 + ((diff * (fa & 0xFFFF)) >> 16)));
 }
 
diff --git a/fx_s1516_longlong.h b/fx_s1516_longlong.h
index 510a3549c4e1c142c7bbed1c9f845d84969a47f5..df2dd1ae1b58b29273e5bb904e6868c05984ebed 100644
--- a/fx_s1516_longlong.h
+++ b/fx_s1516_longlong.h
@@ -10,8 +10,8 @@ typedef int fx_s1516;
 typedef long fixed32;
 typedef long long fixed64;
 
-extern fx_s1516 longlong_to_fx(long long a);
-extern long long fx_to_longlong(fx_s1516 a);
+extern fx_s1516 longlong_to_fx_s1516(long long a);
+extern long long fx_s1516_to_longlong(fx_s1516 a);
 extern fx_s1516 fx_s1516_longlong_mul0(fx_s1516 a, fx_s1516 b);
 extern fx_s1516 fx_s1516_longlong_mul1(fx_s1516 a, fx_s1516 b);
 extern fx_s1516 fx_s1516_longlong_mul2(fx_s1516 a, fx_s1516 b);
diff --git a/fx_s1615_double.h b/fx_s1615_double.h
index 15df94713b7c16405011e4e2fed1d20e36788f62..efff79baa6a135128022059607e73a39f33ffee4 100644
--- a/fx_s1615_double.h
+++ b/fx_s1615_double.h
@@ -7,8 +7,8 @@ typedef int fx_s1615;
 #define FX_S1615_INT_TO_DOUBLE(a) ((a) / P2_15)    // right shift
 #define FX_S1615_DOUBLE_TO_INT(a) (int)((a)*P2_15) // left shift
 
-#define FX_S1615_ADD(a, b) ((a) + (b))
-#define FX_S1615_SUB(a, b) ((a) - (b))
+#define fx_s1615_double_add(a, b) ((a) + (b))
+#define fx_s1615_double_sub(a, b) ((a) - (b))
 #define fx_s1615_double_mul(a, b) FX_S1615_DOUBLE_TO_INT(FX_S1615_INT_TO_DOUBLE(a) * FX_S1615_INT_TO_DOUBLE(b))
 #define fx_s1615_double_div(a, b) FX_S1615_DOUBLE_TO_INT(FX_S1615_INT_TO_DOUBLE(a) / FX_S1615_INT_TO_DOUBLE(b))
 
diff --git a/fx_s1615_longlong.h b/fx_s1615_longlong.h
index bfccea149bfdff2a9a0f8dcf41c8dcf25bc24ec9..69f0fbee748e33690195d56d191ab04124589d37 100644
--- a/fx_s1615_longlong.h
+++ b/fx_s1615_longlong.h
@@ -5,12 +5,12 @@ typedef int fx_s1615;
 typedef long long fixed64;
 
 
-#define fx_s1516_longlong_mul1(a, b) (fx_s1615)(((fixed64)(a) * (b)) >> 15)
-#define fx_s1516_longlong_mul2(a, b) ((a) * (b)) >> 15
-#define fx_s1516_longlong_mul3(a, b) ((a >> 8) * (b >> 7))
-#define fx_s1516_longlong_div1(a, b) (fx_s1615)((fixed64)((a >> 15) / (b >> 15)) << 15)
-#define fx_s1516_longlong_div2(a, b) (((a << 5) / (b >> 6)) << 4) 
-#define fx_s1516_longlong_div3(a, b) (fx_s1615)(((fixed64)(a) << 15) / (b))
+#define fx_s1615_longlong_mul1(a, b) (fx_s1615)(((fixed64)(a) * (b)) >> 15)
+#define fx_s1615_longlong_mul2(a, b) ((a) * (b)) >> 15
+#define fx_s1615_longlong_mul3(a, b) ((a >> 8) * (b >> 7))
+#define fx_s1615_longlong_div1(a, b) (fx_s1615)((fixed64)((a >> 15) / (b >> 15)) << 15)
+#define fx_s1615_longlong_div2(a, b) (((a << 5) / (b >> 6)) << 4) 
+#define fx_s1615_longlong_div3(a, b) (fx_s1615)(((fixed64)(a) << 15) / (b))
 
 
 extern fx_s1615 sine_fx_s1615_longlong(fx_s1615 angle);
diff --git a/fx_s2308_double.h b/fx_s2308_double.h
index cc35cf55936d2994e3e717717cfbd112d5f33f6e..ea3b44a8e1541c433b0d01f994786b515f75dad0 100644
--- a/fx_s2308_double.h
+++ b/fx_s2308_double.h
@@ -5,8 +5,8 @@ typedef int fx_s2308;
 #define FX_TO_INT(a) ((int)(a / (256.0)))
 #define FX_TO_SHORT(a) ((short)(a / (256.0)))
 #define DOUBLE_TO_FX(a) (((int)(a * (256.0))))
-#define FX_ADD(a, b) ((a) + (b))
-#define FX_SUB(a, b) ((a) - (b))
+#define fx_s2308_double_add(a, b) ((a) + (b))
+#define fx_s2308_double_sub(a, b) ((a) - (b))
 #define fx_s2308_double_mul(a, b) DOUBLE_TO_FX(FX_TO_DOUBLE(a) * FX_TO_DOUBLE(b))
 #define fx_s2308_double_div(a, b) DOUBLE_TO_FX(FX_TO_DOUBLE(a) / FX_TO_DOUBLE(b))
 #define PI 3.141592
diff --git a/fx_s3132_double.h b/fx_s3132_double.h
index e47bca0655d4fab1e0d227345b87d977e1f3f8c8..a3a8a1e74bfb0bcbaf092c5ed9f7137b2dfedb9b 100644
--- a/fx_s3132_double.h
+++ b/fx_s3132_double.h
@@ -4,14 +4,14 @@
 #define PI 3.141592653
 #define fx_to_double(a) (a / P2_2to32)
 #define double_to_fx(a) (long long)(a * P2_2to32)
-#define fx_add(a, b) ((a) + (b))
-#define fx_sub(a, b) ((a) - (b))
+#define fx_s3132_double_add(a, b) ((a) + (b))
+#define fx_s3132_double_sub(a, b) ((a) - (b))
 #define fx_s3132_double_mul(a, b) double_to_fx(fx_to_double(a) * fx_to_double(b))
-#define fx_s3132_double_div(a, b) (double)a *(double)b / P2_2to32
-#define fx_div(a, b) double_to_fx(fx_to_double(a) / fx_to_double(b))
-#define fx_sin(a) double_to_fx(sin(fx_to_double(a)))
-#define fx_sqrt(a) double_to_fx(sqrt(fx_to_double(a)))
-#define fx_power(a, b) double_to_fx(pow(fx_to_double(a), fx_to_double(b)))
+#define fx_s3132_double_div1(a, b) (double)a *(double)b / P2_2to32
+#define fx_s3132_double_div(a, b) double_to_fx(fx_to_double(a) / fx_to_double(b))
+#define fx_s3132_double_sine(a) double_to_fx(sin(fx_to_double(a)))
+#define fx_s3132_double_sqrt(a) double_to_fx(sqrt(fx_to_double(a)))
+#define fx_s3132_double_power(a, b) double_to_fx(pow(fx_to_double(a), fx_to_double(b)))
 #define fx_log10(a) double_to_fx(log10(fx_to_double(a)))
 #define fx_ln(a) double_to_fx(log(fx_to_double(a)))
 #define fx_PI() (double_to_fx(PI))
diff --git a/fx_s3231_double.h b/fx_s3231_double.h
index f99b327906657ab2d62a78c7c34333688318918a..ac071a2f3b495689f8d07c5a97ca231f88377a9e 100644
--- a/fx_s3231_double.h
+++ b/fx_s3231_double.h
@@ -10,6 +10,6 @@ typedef long long fx_s3231;
 #define fx_3231_double_mul(a, b) (doubleToFx(fxToDouble(a) * fxToDouble(b)))
 #define fx_3231_double_div(a, b) (doubleToFx(fxToDouble(a) / fxToDouble(b)))
 
-extern long long fx_3231_double_sin();
-extern long long fx_3231_double_sqrt();
-extern long long fx_3231_double_power();
+extern long long fx_3231_double_sin(fx_s3231 a);
+extern long long fx_3231_double_sqrt(fx_s3231 a);
+extern long long fx_3231_double_power(fx_s3231 a, fx_s3231 b);
diff --git a/fx_s3231_longlong.h b/fx_s3231_longlong.h
index f9cc9950ffa53cca6b34746717d4ddf826bb8a85..435528ae13f248ba91f442f123704134ea2ec300 100644
--- a/fx_s3231_longlong.h
+++ b/fx_s3231_longlong.h
@@ -1,9 +1,9 @@
-#define fx_3231_longlong_mul1(a, b) (((a) * (b)) >> 31)
-#define fx_3231_longlong_mul2(a, b) (((a >> 8) * (b >> 8)) >> 15)
-#define fx_3231_longlong_mul3(a, b) ((a >> 16) * (b >> 15))
+#define fx_s3231_longlong_mul1(a, b) (((a) * (b)) >> 31)
+#define fx_s3231_longlong_mul2(a, b) (((a >> 8) * (b >> 8)) >> 15)
+#define fx_s3231_longlong_mul3(a, b) ((a >> 16) * (b >> 15))
 
-#define fx_3231_longlong_div1(a, b) (((a << 8) / (b >> 8)) << 15)
-#define fx_3231_longlong_div2(a, b) (((a << 10) / (b >> 10)) << 11)
-#define fx_3231_longlong_div3(a, b) ((a << 16) / (b >> 15))
+#define fx_s3231_longlong_div1(a, b) (((a << 8) / (b >> 8)) << 15)
+#define fx_s3231_longlong_div2(a, b) (((a << 10) / (b >> 10)) << 11)
+#define fx_s3231_longlong_div3(a, b) ((a << 16) / (b >> 15))
 
-extern long long fx_3231_longlong_sin();
+extern long long fx_3231_longlong_sin(fx_s3231 a);
diff --git a/fx_s4716_double.c b/fx_s4716_double.c
index b6c5df50031d8ab33fa04c490b9224ab37c2daed..2488770c06b6f33279bad63a92c064f55a769b5f 100644
--- a/fx_s4716_double.c
+++ b/fx_s4716_double.c
@@ -10,16 +10,16 @@ fx_s4716 double_to_fx(double a)
     fx_s4716 d2f = DOUBLE_TO_FX(a);
     return d2f;
 }
-double fx_add(double a, double b)
-{
-    fx_s4716 add = double_to_fx(FX_S4716_DOUBLE_ADD(a, b));
-    return fx_to_double(add);
-}
-double fx_sub(double a, double b)
-{
-    fx_s4716 sub = double_to_fx(FX_S4716_DOUBLE_SUB(a, b));
-    return fx_to_double(sub);
-}
+// double fx_add(double a, double b)
+// {
+//     fx_s4716 add = double_to_fx(FX_S4716_DOUBLE_ADD(a, b));
+//     return fx_to_double(add);
+// }
+// double fx_sub(double a, double b)
+// {
+//     fx_s4716 sub = double_to_fx(FX_S4716_DOUBLE_SUB(a, b));
+//     return fx_to_double(sub);
+// }
 // double fx_s4716_double_mul(double a, double b)
 // {
 //     double mul = FX_S4716_DOUBLE_MUL(a, b);
@@ -38,18 +38,18 @@ double fx_inv_pi()
 {
     return fx_to_double(FX_INV_PI);
 }
-double fx_sqrt(double a)
-{
-    double square = FX_S4716_DOUBLE_SQRT(a);
-    return square;
-}
-double fx_pow(double a)
-{
-    double power = fx_to_double(FX_S4716_DOUBLE_POW(a));
-    return power;
-}
-double fx_sine(fx_s4716 a)
-{
-    double sine = double_to_fx(FX_S4716_DOUBLE_SINE(a));
-    return fx_to_double(sine);
-}
+// double fx_sqrt(double a)
+// {
+//     double square = FX_S4716_DOUBLE_SQRT(a);
+//     return square;
+// }
+// double fx_pow(double a)
+// {
+//     double power = fx_to_double(FX_S4716_DOUBLE_POW(a));
+//     return power;
+// }
+// double fx_sine(fx_s4716 a)
+// {
+//     double sine = double_to_fx(FX_S4716_DOUBLE_SINE(a));
+//     return fx_to_double(sine);
+// }
diff --git a/fx_s4716_double.h b/fx_s4716_double.h
index 623d83995b6358d58120e552ff9f28c18d140ab9..e4560febd933adb6a0c131035446ea416012d0ba 100644
--- a/fx_s4716_double.h
+++ b/fx_s4716_double.h
@@ -10,13 +10,13 @@ typedef long long fx_s4716;
 #define FX_TO_DOUBLE(a) (a) / (F_POWER_2_16)
 #define DOUBLE_TO_FX(a) ((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_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(M_PI))
 #define FX_INV_PI (DOUBLE_TO_FX(1 / (M_PI)))
-#define FX_S4716_DOUBLE_SQRT(a) ((sqrt(DOUBLE_TO_FX(a))) / (F_POWER_2_8))
-#define FX_S4716_DOUBLE_POW(a) ((pow(DOUBLE_TO_FX(a), 2.0)) / (F_POWER_2_16))
-#define FX_S4716_DOUBLE_SINE(a) (sin(a))
+#define fx_s4716_double_sqrt(a) ((sqrt(DOUBLE_TO_FX(a))) / (F_POWER_2_8))
+#define fx_s4716_double_pow(a) ((pow(DOUBLE_TO_FX(a), 2.0)) / (F_POWER_2_16))
+#define fx_s4716_double_sin(a) (sin(a))
diff --git a/fx_s4716_longlong.h b/fx_s4716_longlong.h
index eb73976a6cec559e55a1db262db3828aa443e728..0e7bacd91a8f1021897f019d660444325aee3e91 100644
--- a/fx_s4716_longlong.h
+++ b/fx_s4716_longlong.h
@@ -1,10 +1,10 @@
 typedef long long fx_s4716;
 #include <math.h>
 
-#define fx_s4716_longlong_mul1(a, b)(a, b) (((a) * (b)) >> 16)
-#define fx_s4716_longlong_mul2(a, b)(a, b) ((a >> 8) * (b >> 8))
-#define fx_s4716_longlong_mul3(a, b)(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, b) ((a << 16) / (b))
+#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 << 12) / (b)) << 4)
diff --git a/test.c b/test.c
index ab4bc8a30b123c6d2efe972e954975df0cea0cbf..a523610f0fca2cb304a8d40dac8f6b69396ea56e 100644
--- a/test.c
+++ b/test.c
@@ -1,12 +1,122 @@
 #include <stdio.h>
 #include "combination.h"
 
+int tmp;
+
+#if _FX_SYSTEM == 1
+    tmp = 0;
+#elif _FX_SYSTEM == 2
+    tmp = 1;
+#elif _FX_SYSTEM == 3
+    tmp = 2;
+#elif _FX_SYSTEM == 4
+    tmp = 3;
+#elif _FX_SYSTEM == 5
+    tmp = 4;
+#elif _FX_SYSTEM == 6
+    tmp = 5;
+#endif
+
 int main(){
     int a;
+
     char* str;
+
+    if(tmp==0) str = "fx_1516";
+    else if(tmp==1) str = "fx_1615";
+    else if(tmp==2) str = "fx_2308";
+    else if(tmp==3) str = "fx_3132";
+    else if(tmp==4) str = "fx_3231";
+    else if(tmp==5) str = "fx_4716";
+
+    printf("\n=====%s fixed point=====\n", str);
+
+    if(fx_type == 0 && tmp == 0){
+        printf("1.Add  2.Sub  3.Mul  4.Div  5.Sqrt  6.Power   7.Log\n");
+        fflush(stdout);
+        scanf("%d", &a);
+
+        int num1, num2;
+
+        printf("Input 2 numbers : \n");
+        fflush(stdout);
+        scanf("%d", &num1);
+        scanf("%d", &num2);
+
+        if(a==1){
+            printf("\n=====Result=====\n");
+            printf("Add: %d\n", fx_add(num1, num2));
+        }
+        if(a==2){
+            printf("\n=====Result=====\n");
+            printf("Sub: %d\n", fx_sub(num1, num2));
+        }
+        if(a==3){
+            printf("\n=====Result=====\n");
+            printf("Mul: %d\n", fx_mul(num1, num2));
+        }
+        if(a==4){
+            printf("\n=====Result=====\n");
+            printf("Div: %d\n", fx_div(num1, num2));
+        }
+        if(a==5){
+            printf("\n=====Result=====\n");
+            printf("Sqrt: %d\n", fx_sqrt(num1));
+        }
+        if(a==6){
+            printf("\n=====Result=====\n");
+            printf("Pow: %d\n", fx_pow(num1, num2));
+        }
+        // if(a==7){
+        //     printf("\n=====Result=====\n");
+        //     printf("Log: %d\n", fx_log(num1, num2));
+        // }
+    }
+
+    else if(fx_type == 0 && tmp == 1){
+        printf("1.Add  2.Sub  3.Mul  4.Div  5.Sin  6.Sqrt   7.Power\n");
+        fflush(stdout);
+        scanf("%d", &a);
+
+        int num1, num2;
+
+        printf("Input 2 numbers : \n");
+        fflush(stdout);
+        scanf("%d", &num1);
+        scanf("%d", &num2);
+
+        if(a==1){
+            printf("\n=====Result=====\n");
+            printf("Add: %d\n", fx_add(num1, num2));
+        }
+        if(a==2){
+            printf("\n=====Result=====\n");
+            printf("Sub: %d\n", fx_sub(num1, num2));
+        }
+        if(a==3){
+            printf("\n=====Result=====\n");
+            printf("Mul: %d\n", fx_mul(num1, num2));
+        }
+        if(a==4){
+            printf("\n=====Result=====\n");
+            printf("Div: %d\n", fx_div(num1, num2));
+        }
+        if(a==5){
+            printf("\n=====Result=====\n");
+            printf("Sin: %d\n", fx_sin(num1));
+        }
+        if(a==6){
+            printf("\n=====Result=====\n");
+            printf("Sqrt: %d\n", fx_sqrt(num1));
+        }
+        if(a==7){
+            printf("\n=====Result=====\n");
+            printf("Pow: %d\n", fx_pow(num1, num2));
+        }
+    }
     
-    if(fx_type == 0){
-        printf("1. Mul  2.Div\n");
+    else if(fx_type == 0 && tmp == 2){
+        printf("1.Add  2.Sub  3.Mul  4.Div  5.Sin  6.Sqrt   7.Power\n");
         fflush(stdout);
         scanf("%d", &a);
 
@@ -19,16 +129,36 @@ int main(){
 
         if(a==1){
             printf("\n=====Result=====\n");
-            printf("Result: %d\n", fx_mul(num1, num2));
+            printf("Add: %d\n", fx_add(num1, num2));
         }
         if(a==2){
             printf("\n=====Result=====\n");
-            printf("Result: %d\n", fx_div(num1, num2));
+            printf("Sub: %d\n", fx_sub(num1, num2));
+        }
+        if(a==3){
+            printf("\n=====Result=====\n");
+            printf("Mul: %d\n", fx_mul(num1, num2));
+        }
+        if(a==4){
+            printf("\n=====Result=====\n");
+            printf("Div: %d\n", fx_div(num1, num2));
+        }
+        if(a==5){
+            printf("\n=====Result=====\n");
+            printf("Sin: %d\n", fx_sin(num1));
+        }
+        if(a==6){
+            printf("\n=====Result=====\n");
+            printf("Sqrt: %d\n", fx_sqrt(num1));
+        }
+        if(a==7){
+            printf("\n=====Result=====\n");
+            printf("Pow: %d\n", fx_pow(num1, num2));
         }
     }
 
-    else if(fx_type == 1){
-        printf("1. Mul  2.Div\n");
+    else if(fx_type == 1 && tmp == 0){
+        printf("1. Mul  2.Div   3.Sin   4.Sqrt\n");
         fflush(stdout);
         scanf("%d", &a);
 
@@ -45,16 +175,84 @@ int main(){
             printf("MUL2: %d\n", fx_mul2(num1, num2));
             printf("MUL3: %d\n", fx_mul3(num1, num2));
         }
-        if(a==2){
+        else if(a==2){
+            printf("\n=====Result=====\n");
+            printf("Div1: %d\n", fx_div1(num1, num2));
+            printf("Div2: %d\n", fx_div2(num1, num2));
+            printf("Div3: %d\n", fx_div3(num1, num2));
+        }
+        else if(a==3){
+            printf("\n=====Result=====\n");
+            printf("Sin: %d\n", fx_sin(num1));
+        }
+        // else if(a==4){
+        //     printf("\n=====Result=====\n");
+        //     printf("Sqrt: %d\n", fx_sqrt(num1));
+        // }
+    }
+
+    else if(fx_type == 1 && tmp == 1){
+        printf("1. Mul  2.Div   3.Sin\n");
+        fflush(stdout);
+        scanf("%d", &a);
+
+        int num1, num2;
+
+        printf("Input 2 numbers : \n");
+        fflush(stdout);
+        scanf("%d", &num1);
+        scanf("%d", &num2);
+
+        if(a==1){
             printf("\n=====Result=====\n");
             printf("MUL1: %d\n", fx_mul1(num1, num2));
             printf("MUL2: %d\n", fx_mul2(num1, num2));
             printf("MUL3: %d\n", fx_mul3(num1, num2));
         }
+        else if(a==2){
+            printf("\n=====Result=====\n");
+            printf("Div1: %d\n", fx_div1(num1, num2));
+            printf("Div2: %d\n", fx_div2(num1, num2));
+            printf("Div3: %d\n", fx_div3(num1, num2));
+        }
+        else if(a==3){
+            printf("\n=====Result=====\n");
+            printf("Sin: %d\n", fx_sin(num1));
+        }
     }
 
-    if(fx_type == 2){
-        printf("1. Mul  2.Div\n");
+    else if(fx_type == 1 && tmp == 2){
+        printf("1. Mul  2.Div   3.Sin   4.Sqrt\n");
+        fflush(stdout);
+        scanf("%d", &a);
+
+        int num1, num2;
+
+        printf("Input 2 numbers : \n");
+        fflush(stdout);
+        scanf("%d", &num1);
+        scanf("%d", &num2);
+
+        if(a==1){
+            printf("\n=====Result=====\n");
+            printf("MUL1: %d\n", fx_mul1(num1, num2));
+            printf("MUL2: %d\n", fx_mul2(num1, num2));
+            printf("MUL3: %d\n", fx_mul3(num1, num2));
+            //printf("MUL4: %d\n", fx_mul4(num1, num2));
+        }
+        else if(a==2){
+            printf("\n=====Result=====\n");
+            printf("Div1: %d\n", fx_div1(num1, num2));
+            printf("Div2: %d\n", fx_div2(num1, num2));
+        }
+        else if(a==3){
+            printf("\n=====Result=====\n");
+            printf("Sin: %d\n", fx_sin(num1));
+        }
+    }
+
+    else if(fx_type == 2 && tmp == 3){
+        printf("1.Add  2.Sub  3.Mul  4.Div  5.Sin  6.Sqrt   7.Power\n");
         fflush(stdout);
         scanf("%d", &a);
 
@@ -62,21 +260,83 @@ int main(){
 
         printf("Input 2 numbers : \n");
         fflush(stdout);
-        scanf("%ld", &num1);
-        scanf("%ld", &num2);
+        scanf("%d", &num1);
+        scanf("%d", &num2);
 
         if(a==1){
             printf("\n=====Result=====\n");
-            printf("Result: %ld\n", fx_mul(num1, num2));
+            printf("Add: %lld\n", fx_add(num1, num2));
         }
         if(a==2){
             printf("\n=====Result=====\n");
-            printf("Result: %ld\n", fx_div(num1, num2));
+            printf("Sub: %lld\n", fx_sub(num1, num2));
+        }
+        if(a==3){
+            printf("\n=====Result=====\n");
+            printf("Mul: %lld\n", fx_mul(num1, num2));
+        }
+        if(a==4){
+            printf("\n=====Result=====\n");
+            printf("Div: %lld\n", fx_div(num1, num2));
+        }
+        if(a==5){
+            printf("\n=====Result=====\n");
+            printf("Sin: %lld\n", fx_sin(num1));
+        }
+        if(a==6){
+            printf("\n=====Result=====\n");
+            printf("Sqrt: %lld\n", fx_sqrt(num1));
+        }
+        if(a==7){
+            printf("\n=====Result=====\n");
+            printf("Pow: %lld\n", fx_pow(num1, num2));
         }
     }
 
-    else if(fx_type==3){
-        printf("1. Mul  2.Div\n");
+    else if(fx_type == 2 && tmp == 4){
+        printf("1.Add  2.Sub  3.Mul  4.Div  5.Sin  6.Sqrt   7.Power\n");
+        fflush(stdout);
+        scanf("%d", &a);
+
+        long long num1, num2;
+
+        printf("Input 2 numbers : \n");
+        fflush(stdout);
+        scanf("%d", &num1);
+        scanf("%d", &num2);
+
+        if(a==1){
+            printf("\n=====Result=====\n");
+            printf("Add: %lld\n", fx_add(num1, num2));
+        }
+        if(a==2){
+            printf("\n=====Result=====\n");
+            printf("Sub: %lld\n", fx_sub(num1, num2));
+        }
+        if(a==3){
+            printf("\n=====Result=====\n");
+            printf("Mul: %lld\n", fx_mul(num1, num2));
+        }
+        if(a==4){
+            printf("\n=====Result=====\n");
+            printf("Div: %lld\n", fx_div(num1, num2));
+        }
+        if(a==5){
+            printf("\n=====Result=====\n");
+            printf("Sin: %lld\n", fx_sin(num1));
+        }
+        if(a==6){
+            printf("\n=====Result=====\n");
+            printf("Sqrt: %lld\n", fx_sqrt(num1));
+        }
+        if(a==7){
+            printf("\n=====Result=====\n");
+            printf("Pow: %lld\n", fx_pow(num1, num2));
+        }
+    }
+
+    else if(fx_type == 2 && tmp == 5){
+        printf("1.Add  2.Sub  3.Mul  4.Div  5.Sqrt   6.Power    7.Sin\n");
         fflush(stdout);
         scanf("%d", &a);
 
@@ -84,20 +344,122 @@ int main(){
 
         printf("Input 2 numbers : \n");
         fflush(stdout);
-        scanf("%ld", &num1);
-        scanf("%ld", &num2);
+        scanf("%lld", &num1);
+        scanf("%lld", &num2);
 
         if(a==1){
             printf("\n=====Result=====\n");
-            printf("MUL1: %ld\n", fx_mul1(num1, num2));
-            printf("MUL2: %ld\n", fx_mul2(num1, num2));
-            printf("MUL3: %ld\n", fx_mul3(num1, num2));
+            printf("Add: %lld\n", fx_add(num1, num2));
         }
         if(a==2){
             printf("\n=====Result=====\n");
-            printf("MUL1: %ld\n", fx_mul1(num1, num2));
-            printf("MUL2: %ld\n", fx_mul2(num1, num2));
-            printf("MUL3: %ld\n", fx_mul3(num1, num2));
+            printf("Sub: %lld\n", fx_sub(num1, num2));
+        }
+        if(a==3){
+            printf("\n=====Result=====\n");
+            printf("Mul: %lld\n", fx_mul(num1, num2));
+        }
+        if(a==4){
+            printf("\n=====Result=====\n");
+            printf("Div: %lld\n", fx_div(num1, num2));
+        }
+        if(a==5){
+            printf("\n=====Result=====\n");
+            printf("Sqrt: %lld\n", fx_sqrt(num1));
+        }
+        if(a==6){
+            printf("\n=====Result=====\n");
+            printf("Pow: %lld\n", fx_pow(num1, num2));
+        }
+        if(a==7){
+            printf("\n=====Result=====\n");
+            printf("Sin: %lld\n", fx_sin(num1));
+        }
+    }
+
+    else if(fx_type == 3 && tmp == 3){
+        printf("1. Mul  2.Div   3.Sin\n");
+        fflush(stdout);
+        scanf("%d", &a);
+
+        long long num1, num2;
+
+        printf("Input 2 numbers : \n");
+        fflush(stdout);
+        scanf("%lld", &num1);
+        scanf("%lld", &num2);
+
+        if(a==1){
+            printf("\n=====Result=====\n");
+            printf("MUL1: %lld\n", fx_mul1(num1, num2));
+            printf("MUL2: %lld\n", fx_mul2(num1, num2));
+            printf("MUL3: %lld\n", fx_mul3(num1, num2));
+        }
+        else if(a==2){
+            printf("\n=====Result=====\n");
+            printf("Div1: %lld\n", fx_div1(num1, num2));
+            printf("Div2: %lld\n", fx_div2(num1, num2));
+            printf("Div3: %lld\n", fx_div3(num1, num2));
+        }
+        else if(a==3){
+            printf("\n=====Result=====\n");
+            printf("Sin: %lld\n", fx_sin(num1));
+        }
+    }
+
+    else if(fx_type == 3 && tmp == 4){
+        printf("1. Mul  2.Div   3.Sin\n");
+        fflush(stdout);
+        scanf("%d", &a);
+
+        long long num1, num2;
+
+        printf("Input 2 numbers : \n");
+        fflush(stdout);
+        scanf("%lld", &num1);
+        scanf("%lld", &num2);
+
+        if(a==1){
+            printf("\n=====Result=====\n");
+            printf("MUL1: %lld\n", fx_mul1(num1, num2));
+            printf("MUL2: %lld\n", fx_mul2(num1, num2));
+            printf("MUL3: %lld\n", fx_mul3(num1, num2));
+        }
+        else if(a==2){
+            printf("\n=====Result=====\n");
+            printf("Div1: %lld\n", fx_div1(num1, num2));
+            printf("Div2: %lld\n", fx_div2(num1, num2));
+            printf("Div3: %lld\n", fx_div3(num1, num2));
+        }
+        else if(a==3){
+            printf("\n=====Result=====\n");
+            printf("Sin: %lld\n", fx_sin(num1));
+        }
+    }
+
+    else if(fx_type == 3 && tmp == 5){
+        printf("1. Mul  2.Div\n");
+        fflush(stdout);
+        scanf("%d", &a);
+
+        long long num1, num2;
+
+        printf("Input 2 numbers : \n");
+        fflush(stdout);
+        scanf("%lld", &num1);
+        scanf("%lld", &num2);
+
+        if(a==1){
+            printf("\n=====Result=====\n");
+            printf("MUL1: %lld\n", fx_mul1(num1, num2));
+            printf("MUL2: %lld\n", fx_mul2(num1, num2));
+            printf("MUL3: %lld\n", fx_mul3(num1, num2));
+        }
+        else if(a==2){
+            printf("\n=====Result=====\n");
+            printf("Div1: %lld\n", fx_div1(num1, num2));
+            printf("Div2: %lld\n", fx_div2(num1, num2));
+            printf("Div3: %lld\n", fx_div3(num1, num2));
         }
     }
 }
\ No newline at end of file