diff --git a/fx_project/Makefile b/fx_project/Makefile
index 96c6c65720bf75766540e722119773e9c5901f56..bbb8ea8ea8adac6d822d25968e57c855132ec5ab 100644
--- a/fx_project/Makefile
+++ b/fx_project/Makefile
@@ -1,18 +1,19 @@
-SRCS := test.c fx_s1516_double.c
+SRCS := test.c fx_s1516_double.c fx_s1516_longlong.c
 OBJS = $(SRCS:.c=.o)
 CC = gcc
-CFLAGS = -c -Wall -g
-# CFLAGS = -c -Wall -O2
+CFLAGS = -Wall
 
-fx_x1516_double: $(OBJS)
+fx_test: $(OBJS)
 	$(CC) -o $@ $^
 
-.c.o: 
-	$(CC) ${CFLAGS} $<
+test.o: test.c
+	$(CC) $(CFLAGS) -c $^
 
-clean:
-	-rm $(OBJS)
-	rm fx_x1516_double
+fx_s1516_double.o: fx_s1516_double.c
+	$(CC) -c $^
+
+fx_s1516_longlong.o: fx_s1516_longlong.c
+	$(CC) -c $^
 
-dep:
-	$(CC) -M $(SRCS)
\ No newline at end of file
+clean:
+	rm $(OBJS) fx_test
\ No newline at end of file
diff --git a/fx_project/fx_s1516_double.c b/fx_project/fx_s1516_double.c
index 1acdb27a4215b367d29cbd5e3f2d617650fb7744..4ebe7a99b68dcaa876cbc2dace16fbe0a8a97e7e 100644
--- a/fx_project/fx_s1516_double.c
+++ b/fx_project/fx_s1516_double.c
@@ -9,39 +9,39 @@ double fx_to_double(fx_s1516 a) {
     return ((double)(a) / P2_16);
 }
 
-double fx_s1516_add(double a, double b){
+double fx_s1516_double_add(double a, double b){
     return double_to_fx((a) + (b));
 }
 
-double fx_s1516_sub(double a, double b){
+double fx_s1516_double_sub(double a, double b){
     return double_to_fx((a) - (b));
 }
 
-double fx_s1516_mul(double a, double b) {
+double fx_s1516_double_mul(double a, double b) {
     return double_to_fx((a) * (b) * P2_16);
 }
 
-double fx_s1516_div(double a, double b) {
+double fx_s1516_double_div(double a, double b) {
     return double_to_fx((a) / (b) / P2_16);
 }
 
-double degree_to_radian(fx_s1516 a) {
-    return ((a) * M_PI / 180);
+double degree_to_radian(double a) {
+    return ((a) * fx_s1516_PI / 180);
 }
 
-double fx_s1516_sin(double a) {
+double fx_s1516_double_sin(double a) {
     return double_to_fx(sin(a * P2_16) / (P2_16));
 }
 
-double fx_s1516_sqrt(double a) {
+double fx_s1516_double_sqrt(double a) {
     return double_to_fx(sqrt(a) / sqrt(P2_16));
 }
 
-double fx_s1516_pow(double a, double b) {
+double fx_s1516_double_pow(double a, double b) {
     return double_to_fx(pow(a, (double)b) * pow(P2_16, (double)b - 1));
 }
 
-double fx_s1516_log(double a, double b) {
+double fx_s1516_double_log(double a, double b) {
     return double_to_fx(baselog(a * P2_16, b) / (P2_16));
 }
 
diff --git a/fx_project/fx_s1516_double.h b/fx_project/fx_s1516_double.h
index b65a88560c6ab11e9bc18ed18dca8af2bdeeddf8..2b69dd9fd6513b3fd252f4d488aa149296438d9a 100644
--- a/fx_project/fx_s1516_double.h
+++ b/fx_project/fx_s1516_double.h
@@ -6,21 +6,21 @@ typedef int fx_s1516;
 #include <stdio.h>
 #define _USE_MATH_DEFINES
 #include <math.h>
-#define P2_16 65536.0f
+#define P2_16 65536
+#define fP2_16 65536.0f
 #define e M_E
 #define fx_s1516_PI M_PI
 #define fx_s1516_INVERSE_PI 1/M_PI
 
-
 extern double double_to_fx(double a);
-extern double baselog(double a, double base);
-extern double fx_s1516_add(double a, double b);
-extern double fx_s1516_sub(double a, double b);
-extern double fx_s1516_mul(double a, double b);
-extern double fx_s1516_div(double a, double b);
-extern double fx_s1516_sqrt(double a);
-extern double fx_s1516_pow(double a, double b);
-extern double fx_s1516_log(double a, double b);
-extern double degree_to_radian(fx_s1516 a);
 extern double fx_to_double(fx_s1516 a);
-extern double fx_s1516_sin(double a);
\ No newline at end of file
+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);
+extern double fx_s1516_double_mul(double a, double b);
+extern double fx_s1516_double_div(double a, double b);
+extern double fx_s1516_double_sqrt(double a);
+extern double fx_s1516_double_pow(double a, double b);
+extern double fx_s1516_double_log(double a, double b);
+extern double degree_to_radian(double a);
+extern double fx_s1516_double_sin(double a);
\ No newline at end of file
diff --git a/fx_project/fx_s1516_longlong.c b/fx_project/fx_s1516_longlong.c
new file mode 100644
index 0000000000000000000000000000000000000000..cb8813e4c76a2ef3c1cedd19c0ff61e33e43cad2
--- /dev/null
+++ b/fx_project/fx_s1516_longlong.c
@@ -0,0 +1,182 @@
+//fx_1516_longlong.c file
+#include "fx_s1516_longlong.h"
+
+#define FX32_90                            0x005A0000
+#define FX32_180                           0x00B40000
+#define FX32_360                           0x01680000
+
+// sin table
+const fixed32 fx32_SinTable[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,
+        53019,53683,54331,54963,55577,56175,56755,57319,57864,58393,58903,59395,59870,60326,60763, 61183,61583,61965,62328,62672,62997,63302,63589,63856,64103,64331,
+        64540,64729,64898,65047,65176,65286,65376,65446,65496,65526,65536,65526
+    };
+int sqrt_lut[1025] =
+	{
+		0x00000001,0x01000000,0x016A09E6,0x01BB67AE,0x02000000,0x023C6EF3,0x027311C2,0x02A54FF5,0x02D413CC,0x03000000,0x03298B07,0x03510E52,0x0376CF5D,0x039B0568,0x03BDDD42,0x03DF7BD6,0x04000000,0x041F83D9,0x043E1DB3,0x045BE0CD,0x0478DDE6,0x049523AE,
+		0x04B0BF16,0x04CBBB9D,0x04E62385,0x05000000,0x05195957,0x0532370B,0x054A9FEA,0x05629A29,0x057A2B74,0x05915901,0x05A82799,0x05BE9BA8,0x05D4B943,0x05EA8434,0x06000000,0x06152FEC,0x062A1709,0x063EB830,0x0653160E,0x06673326,0x067B11D2,0x068EB44A,0x06A21CA4,0x06B54CDA,
+		0x06C846C7,0x06DB0C2E,0x06ED9EBA,0x07000000,0x07123180,0x072434A7,0x07360AD1,0x0747B548,0x07593547,0x076A8BFB,0x077BBA84,0x078CC1F3,0x079DA34E,0x07AE5F91,0x07BEF7AC,0x07CF6C85,0x07DFBEFA,0x07EFEFDF,0x08000000,0x080FF01F,0x081FC0FB,0x082F7347,0x083F07B3,0x084E7EE6,
+		0x085DD983,0x086D1826,0x087C3B66,0x088B43D4,0x089A31FD,0x08A90668,0x08B7C19A,0x08C66410,0x08D4EE47,0x08E360B5,0x08F1BBCD,0x09000000,0x090E2DB8,0x091C4560,0x092A475C,0x09383410,0x09460BDC,0x0953CF1D,0x09617E2C,0x096F1963,0x097CA116,0x098A1598,0x0997773A,0x09A4C64B,
+		0x09B20318,0x09BF2DEA,0x09CC470A,0x09D94EBE,0x09E6454C,0x09F32AF7,0x0A000000,0x0A0CC4A6,0x0A197927,0x0A261DC1,0x0A32B2AF,0x0A3F382A,0x0A4BAE6A,0x0A5815A7,0x0A646E17,0x0A70B7ED,0x0A7CF35D,0x0A89209A,0x0A953FD4,0x0AA1513C,0x0AAD5500,0x0AB94B4D,0x0AC53452,0x0AD11039,
+		0x0ADCDF2E,0x0AE8A15B,0x0AF456E9,0x0B000000,0x0B0B9CC7,0x0B172D66,0x0B22B202,0x0B2E2AC1,0x0B3997C6,0x0B44F936,0x0B504F33,0x0B5B99DF,0x0B66D95D,0x0B720DCD,0x0B7D3750,0x0B885605,0x0B936A0C,0x0B9E7382,0x0BA97286,0x0BB46736,0x0BBF51AE,0x0BCA320B,0x0BD50868,0x0BDFD4E2,
+		0x0BEA9792,0x0BF55093,0x0C000000,0x0C0AA5F1,0x0C154280,0x0C1FD5C5,0x0C2A5FD9,0x0C34E0D4,0x0C3F58CC,0x0C49C7D9,0x0C542E12,0x0C5E8B8D,0x0C68E05F,0x0C732C9E,0x0C7D7060,0x0C87ABB9,0x0C91DEBF,0x0C9C0984,0x0CA62C1D,0x0CB0469E,0x0CBA5919,0x0CC463A2,0x0CCE664C,0x0CD86129,
+		0x0CE2544B,0x0CEC3FC3,0x0CF623A5,0x0D000000,0x0D09D4E5,0x0D13A267,0x0D1D6895,0x0D27277F,0x0D30DF36,0x0D3A8FCA,0x0D443949,0x0D4DDBC5,0x0D57774B,0x0D610BEB,0x0D6A99B4,0x0D7420B4,0x0D7DA0FA,0x0D871A93,0x0D908D8E,0x0D99F9F8,0x0DA35FE0,0x0DACBF52,0x0DB6185C,0x0DBF6B0A,
+		0x0DC8B76B,0x0DD1FD8A,0x0DDB3D74,0x0DE47735,0x0DEDAADA,0x0DF6D86F,0x0E000000,0x0E092197,0x0E123D42,0x0E1B530C,0x0E246300,0x0E2D6D28,0x0E367191,0x0E3F7045,0x0E48694E,0x0E515CB8,0x0E5A4A8D,0x0E6332D8,0x0E6C15A2,0x0E74F2F6,0x0E7DCADD,0x0E869D63,0x0E8F6A90,0x0E98326E,
+		0x0EA0F507,0x0EA9B264,0x0EB26A8F,0x0EBB1D90,0x0EC3CB71,0x0ECC743B,0x0ED517F7,0x0EDDB6AE,0x0EE65068,0x0EEEE52E,0x0EF77508,0x0F000000,0x0F08861C,0x0F110766,0x0F1983E6,0x0F21FBA3,0x0F2A6EA6,0x0F32DCF6,0x0F3B469C,0x0F43AB9F,0x0F4C0C07,0x0F5467DB,0x0F5CBF22,0x0F6511E5,
+		0x0F6D602A,0x0F75A9F9,0x0F7DEF58,0x0F863050,0x0F8E6CE6,0x0F96A522,0x0F9ED90B,0x0FA708A8,0x0FAF33FE,0x0FB75B16,0x0FBF7DF5,0x0FC79CA3,0x0FCFB724,0x0FD7CD81,0x0FDFDFBF,0x0FE7EDE4,0x0FEFF7F7,0x0FF7FDFE,0x10000000,0x1007FE00,0x100FF807,0x1017EE1A,0x101FE03F,0x1027CE7B,
+		0x102FB8D4,0x10379F51,0x103F81F6,0x104760C9,0x104F3BD0,0x10571310,0x105EE68E,0x1066B651,0x106E825D,0x10764AB8,0x107E0F66,0x1085D06E,0x108D8DD3,0x1095479C,0x109CFDCD,0x10A4B06B,0x10AC5F7C,0x10B40B04,0x10BBB307,0x10C3578C,0x10CAF896,0x10D2962A,0x10DA304D,0x10E1C704,
+		0x10E95A53,0x10F0EA3F,0x10F876CC,0x11000000,0x110785DD,0x110F0869,0x111687A8,0x111E039F,0x11257C51,0x112CF1C3,0x113463FA,0x113BD2F9,0x11433EC4,0x114AA760,0x11520CD1,0x11596F1A,0x1160CE41,0x11682A48,0x116F8334,0x1176D909,0x117E2BCA,0x11857B7B,0x118CC821,0x119411BF,
+		0x119B5859,0x11A29BF2,0x11A9DC8F,0x11B11A32,0x11B854E0,0x11BF8C9D,0x11C6C16B,0x11CDF34E,0x11D5224A,0x11DC4E63,0x11E3779B,0x11EA9DF7,0x11F1C179,0x11F8E226,0x12000000,0x12071B0A,0x120E3349,0x121548BF,0x121C5B70,0x12236B5F,0x122A788F,0x12318304,0x12388AC0,0x123F8FC6,
+		0x1246921A,0x124D91BF,0x12548EB9,0x125B8909,0x126280B3,0x126975BA,0x12706821,0x127757EB,0x127E451B,0x12852FB4,0x128C17B9,0x1292FD2C,0x1299E011,0x12A0C06A,0x12A79E3A,0x12AE7984,0x12B5524A,0x12BC2891,0x12C2FC59,0x12C9CDA6,0x12D09C7B,0x12D768DA,0x12DE32C6,0x12E4FA41,
+		0x12EBBF4F,0x12F281F2,0x12F9422C,0x13000000,0x1306BB70,0x130D747F,0x13142B30,0x131ADF85,0x13219181,0x13284125,0x132EEE75,0x13359973,0x133C4221,0x1342E881,0x13498C97,0x13502E64,0x1356CDEB,0x135D6B2E,0x13640630,0x136A9EF2,0x13713577,0x1377C9C2,0x137E5BD4,0x1384EBAF,
+		0x138B7957,0x139204CD,0x13988E14,0x139F152D,0x13A59A1A,0x13AC1CDF,0x13B29D7D,0x13B91BF6,0x13BF984C,0x13C61282,0x13CC8A99,0x13D30094,0x13D97474,0x13DFE63D,0x13E655EE,0x13ECC38C,0x13F32F17,0x13F99893,0x14000000,0x14066560,0x140CC8B6,0x14132A04,0x1419894C,0x141FE68F,
+		0x142641CF,0x142C9B0E,0x1432F24F,0x14394793,0x143F9ADC,0x1445EC2B,0x144C3B83,0x145288E6,0x1458D455,0x145F1DD2,0x1465655F,0x146BAAFD,0x1471EEAF,0x14783076,0x147E7054,0x1484AE4B,0x148AEA5C,0x1491248A,0x14975CD5,0x149D9340,0x14A3C7CC,0x14A9FA7B,0x14B02B4F,0x14B65A49,
+		0x14BC876B,0x14C2B2B7,0x14C8DC2E,0x14CF03D2,0x14D529A4,0x14DB4DA6,0x14E16FDA,0x14E79042,0x14EDAEDE,0x14F3CBB1,0x14F9E6BB,0x15000000,0x1506177F,0x150C2D3B,0x15124135,0x1518536F,0x151E63EA,0x152472A7,0x152A7FA9,0x15308AF1,0x15369480,0x153C9C57,0x1542A278,0x1548A6E5,
+		0x154EA99F,0x1554AAA7,0x155AAA00,0x1560A7A9,0x1566A3A5,0x156C9DF5,0x1572969B,0x15788D98,0x157E82EC,0x1584769B,0x158A68A4,0x1590590A,0x159647CD,0x159C34F0,0x15A22073,0x15A80A57,0x15ADF29F,0x15B3D94B,0x15B9BE5D,0x15BFA1D6,0x15C583B6,0x15CB6401,0x15D142B6,0x15D71FD8,
+		0x15DCFB67,0x15E2D564,0x15E8ADD2,0x15EE84B0,0x15F45A01,0x15FA2DC6,0x16000000,0x1605D0AF,0x160B9FD6,0x16116D75,0x1617398F,0x161D0423,0x1622CD33,0x162894C1,0x162E5ACD,0x16341F58,0x1639E265,0x163FA3F3,0x16456405,0x164B229B,0x1650DFB6,0x16569B58,0x165C5582,0x16620E35,
+		0x1667C571,0x166D7B39,0x16732F8D,0x1678E26E,0x167E93DD,0x168443DC,0x1689F26C,0x168F9F8D,0x16954B41,0x169AF589,0x16A09E66,0x16A645D9,0x16ABEBE3,0x16B19084,0x16B733BF,0x16BCD594,0x16C27605,0x16C81511,0x16CDB2BB,0x16D34F03,0x16D8E9EB,0x16DE8372,0x16E41B9B,0x16E9B267,
+		0x16EF47D6,0x16F4DBE9,0x16FA6EA1,0x17000000,0x17059005,0x170B1EB4,0x1710AC0B,0x1716380C,0x171BC2B9,0x17214C12,0x1726D418,0x172C5ACC,0x1731E02E,0x17376441,0x173CE704,0x1742687A,0x1747E8A2,0x174D677D,0x1752E50D,0x17586153,0x175DDC4E,0x17635602,0x1768CE6D,0x176E4591,
+		0x1773BB6F,0x17793008,0x177EA35D,0x1784156E,0x1789863D,0x178EF5CA,0x17946416,0x1799D123,0x179F3CF0,0x17A4A77F,0x17AA10D1,0x17AF78E6,0x17B4DFC0,0x17BA455F,0x17BFA9C4,0x17C50CEF,0x17CA6EE3,0x17CFCF9F,0x17D52F24,0x17DA8D73,0x17DFEA8E,0x17E54674,0x17EAA126,0x17EFFAA7,
+		0x17F552F5,0x17FAAA12,0x18000000,0x180554BD,0x180AA84C,0x180FFAAE,0x18154BE2,0x181A9BEA,0x181FEAC6,0x18253878,0x182A8500,0x182FD05F,0x18351A95,0x183A63A3,0x183FAB8B,0x1844F24C,0x184A37E8,0x184F7C60,0x1854BFB3,0x185A01E3,0x185F42F1,0x186482DD,0x1869C1A8,0x186EFF53,
+		0x18743BDE,0x1879774A,0x187EB199,0x1883EAC9,0x188922DE,0x188E59D6,0x18938FB3,0x1898C475,0x189DF81E,0x18A32AAD,0x18A85C24,0x18AD8C84,0x18B2BBCC,0x18B7E9FE,0x18BD171A,0x18C24321,0x18C76E13,0x18CC97F2,0x18D1C0BE,0x18D6E878,0x18DC0F20,0x18E134B6,0x18E6593D,0x18EB7CB4,
+		0x18F09F1C,0x18F5C075,0x18FAE0C1,0x19000000,0x19051E32,0x190A3B58,0x190F5773,0x19147284,0x19198C8B,0x191EA589,0x1923BD7E,0x1928D46B,0x192DEA50,0x1932FF2F,0x19381308,0x193D25DB,0x194237AA,0x19474874,0x194C583A,0x195166FE,0x195674BF,0x195B817E,0x19608D3C,0x196597F9,
+		0x196AA1B6,0x196FAA74,0x1974B233,0x1979B8F3,0x197EBEB6,0x1983C37C,0x1988C745,0x198DCA13,0x1992CBE5,0x1997CCBC,0x199CCC99,0x19A1CB7D,0x19A6C967,0x19ABC659,0x19B0C253,0x19B5BD55,0x19BAB761,0x19BFB076,0x19C4A896,0x19C99FC1,0x19CE95F7,0x19D38B39,0x19D87F87,0x19DD72E3,
+		0x19E2654C,0x19E756C4,0x19EC474A,0x19F136DF,0x19F62584,0x19FB1339,0x1A000000,0x1A04EBD7,0x1A09D6C0,0x1A0EC0BC,0x1A13A9CB,0x1A1891ED,0x1A1D7924,0x1A225F6E,0x1A2744CE,0x1A2C2943,0x1A310CCF,0x1A35EF71,0x1A3AD12A,0x1A3FB1FA,0x1A4491E3,0x1A4970E4,0x1A4E4EFE,0x1A532C32,
+		0x1A580880,0x1A5CE3E9,0x1A61BE6C,0x1A66980C,0x1A6B70C7,0x1A70489F,0x1A751F94,0x1A79F5A6,0x1A7ECAD7,0x1A839F26,0x1A887293,0x1A8D4521,0x1A9216CE,0x1A96E79C,0x1A9BB78A,0x1AA0869A,0x1AA554CC,0x1AAA2220,0x1AAEEE97,0x1AB3BA31,0x1AB884EF,0x1ABD4ED1,0x1AC217D7,0x1AC6E003,
+		0x1ACBA754,0x1AD06DCB,0x1AD53369,0x1AD9F82D,0x1ADEBC19,0x1AE37F2D,0x1AE84169,0x1AED02CD,0x1AF1C35B,0x1AF68312,0x1AFB41F4,0x1B000000,0x1B04BD36,0x1B097998,0x1B0E3526,0x1B12EFE0,0x1B17A9C7,0x1B1C62DB,0x1B211B1C,0x1B25D28B,0x1B2A8929,0x1B2F3EF5,0x1B33F3F1,0x1B38A81C,
+		0x1B3D5B77,0x1B420E03,0x1B46BFC0,0x1B4B70AE,0x1B5020CE,0x1B54D020,0x1B597EA4,0x1B5E2C5B,0x1B62D946,0x1B678565,0x1B6C30B8,0x1B70DB3F,0x1B7584FC,0x1B7A2DED,0x1B7ED615,0x1B837D73,0x1B882408,0x1B8CC9D3,0x1B916ED6,0x1B961311,0x1B9AB684,0x1B9F592F,0x1BA3FB14,0x1BA89C32,
+		0x1BAD3C8A,0x1BB1DC1B,0x1BB67AE8,0x1BBB18EF,0x1BBFB632,0x1BC452B0,0x1BC8EE6B,0x1BCD8962,0x1BD22395,0x1BD6BD06,0x1BDB55B5,0x1BDFEDA1,0x1BE484CC,0x1BE91B36,0x1BEDB0DE,0x1BF245C7,0x1BF6D9EF,0x1BFB6D57,0x1C000000,0x1C0491E9,0x1C092314,0x1C0DB381,0x1C12432F,0x1C16D220,
+		0x1C1B6054,0x1C1FEDCB,0x1C247A85,0x1C290684,0x1C2D91C6,0x1C321C4D,0x1C36A619,0x1C3B2F2A,0x1C3FB780,0x1C443F1D,0x1C48C600,0x1C4D4C29,0x1C51D19A,0x1C565651,0x1C5ADA51,0x1C5F5D98,0x1C63E028,0x1C686201,0x1C6CE322,0x1C71638D,0x1C75E342,0x1C7A6240,0x1C7EE08A,0x1C835E1D,
+		0x1C87DAFC,0x1C8C5727,0x1C90D29D,0x1C954D5F,0x1C99C76D,0x1C9E40C8,0x1CA2B971,0x1CA73166,0x1CABA8AA,0x1CB01F3B,0x1CB4951B,0x1CB90A49,0x1CBD7EC7,0x1CC1F293,0x1CC665B0,0x1CCAD81C,0x1CCF49D9,0x1CD3BAE6,0x1CD82B44,0x1CDC9AF3,0x1CE109F4,0x1CE57847,0x1CE9E5EC,0x1CEE52E3,
+		0x1CF2BF2D,0x1CF72ACA,0x1CFB95BB,0x1D000000,0x1D046998,0x1D08D285,0x1D0D3AC6,0x1D11A25C,0x1D160948,0x1D1A6F89,0x1D1ED520,0x1D233A0D,0x1D279E51,0x1D2C01EB,0x1D3064DC,0x1D34C725,0x1D3928C5,0x1D3D89BE,0x1D41EA0E,0x1D4649B7,0x1D4AA8B9,0x1D4F0714,0x1D5364C8,0x1D57C1D6,
+		0x1D5C1E3E,0x1D607A01,0x1D64D51E,0x1D692F95,0x1D6D8968,0x1D71E296,0x1D763B20,0x1D7A9306,0x1D7EEA48,0x1D8340E7,0x1D8796E3,0x1D8BEC3C,0x1D9040F2,0x1D949505,0x1D98E877,0x1D9D3B47,0x1DA18D76,0x1DA5DF03,0x1DAA2FEF,0x1DAE803B,0x1DB2CFE6,0x1DB71EF1,0x1DBB6D5C,0x1DBFBB28,
+		0x1DC40854,0x1DC854E2,0x1DCCA0D0,0x1DD0EC20,0x1DD536D2,0x1DD980E6,0x1DDDCA5C,0x1DE21335,0x1DE65B70,0x1DEAA30F,0x1DEEEA11,0x1DF33076,0x1DF77640,0x1DFBBB6E,0x1E000000,0x1E0443F6,0x1E088752,0x1E0CCA12,0x1E110C39,0x1E154DC4,0x1E198EB6,0x1E1DCF0E,0x1E220ECD,0x1E264DF2,
+		0x1E2A8C7E,0x1E2ECA71,0x1E3307CC,0x1E37448E,0x1E3B80B9,0x1E3FBC4B,0x1E43F746,0x1E4831AA,0x1E4C6B77,0x1E50A4AD,0x1E54DD4C,0x1E591556,0x1E5D4CC9,0x1E6183A6,0x1E65B9ED,0x1E69EFA0,0x1E6E24BD,0x1E725945,0x1E768D39,0x1E7AC099,0x1E7EF364,0x1E83259B,0x1E87573F,0x1E8B884F,
+		0x1E8FB8CC,0x1E93E8B7,0x1E98180E,0x1E9C46D3,0x1EA07506,0x1EA4A2A7,0x1EA8CFB6,0x1EACFC33,0x1EB1281F,0x1EB5537B,0x1EB97E45,0x1EBDA87F,0x1EC1D228,0x1EC5FB41,0x1ECA23CA,0x1ECE4BC4,0x1ED2732E,0x1ED69A09,0x1EDAC054,0x1EDEE611,0x1EE30B40,0x1EE72FE0,0x1EEB53F2,0x1EEF7776,
+		0x1EF39A6C,0x1EF7BCD5,0x1EFBDEB1,0x1F000000,0x1F0420C1,0x1F0840F7,0x1F0C60A0,0x1F107FBD,0x1F149E4D,0x1F18BC53,0x1F1CD9CC,0x1F20F6BB,0x1F25131E,0x1F292EF7,0x1F2D4A45,0x1F316508,0x1F357F42,0x1F3998F1,0x1F3DB217,0x1F41CAB3,0x1F45E2C6,0x1F49FA4F,0x1F4E1150,0x1F5227C8,
+		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)
+{
+	return (a * 65536);
+}
+
+long long fx_to_longlong(fx_s1516 a)
+{
+	return (a / 65536);
+}
+
+fx_s1516 fx_s1516_longlong_mul0(fx_s1516 a, fx_s1516 b)
+{
+	return (fixed32)(((fixed64)a * b) >> 16);
+}
+
+fx_s1516 fx_s1516_longlong_mul1(fx_s1516 a, fx_s1516 b)
+{
+	return (fixed32)((a * b) >> 16); // no fixed
+}
+
+fx_s1516 fx_s1516_longlong_mul2(fx_s1516 a, fx_s1516 b)
+{
+	return (fixed32)((a >> 8) * (b >> 8));
+}
+
+fx_s1516 fx_s1516_longlong_mul3(fx_s1516 a, fx_s1516 b)
+{
+	return (fixed32)((a >> 10) * (b >> 6));
+}
+
+fx_s1516 fx_s1516_longlong_mul4(fx_s1516 a, fx_s1516 b)
+{
+	return (fixed32)((a >> 4) * (b >> 4) >> 8);
+}
+
+//mul���� (fixed) conversion ���ϸ� : ���ڰ� -1 ���� 1�� (�۰�)����ȭ �Ǿ������� ������ ������. 
+// fixed�� �ٿ��� ���� �غ���
+// ����Ʈ ���굵 �������� 
+// for ���� ���� ��������
+// ���� ���� ���� �ź��� ���� ū�ű��� �� �־��
+
+// ������ ���� : shift �������� ������ ���� 0�� �Ǿ� ������ �� �����Ƿ� �����ؾ� �Ѵ�.
+fx_s1516 fx_s1516_longlong_div0(fx_s1516 a, fx_s1516 b)
+{
+	return (fixed32)(((fixed64)a << 16) / b);
+}
+
+/*
+* a(�������� ��)�� long long���� ij����, 16bit shift ���� �� b(������ ��)�� ����
+* long long ij����: int(32bit)�� a�� long long(64bit)�� ij���������ν� �ӵ��� ���������� 16bit shift ������ �� �� �������� �ս��� ���� �� �ִ�.
+* fx_s1516_longlong�� ������ ��Ģ�����̹Ƿ� a�� b�� ����� ������ �����̰ų� �Ǽ������� ������� �� �Ҽ����� ������ �������� ��� ���������� Ŀ���� ������ �̰��� �����ϰ��� �̸� a�� 16bit shift ��Ų �� b�� ������.
+*/
+
+fx_s1516 fx_s1516_longlong_div1(fx_s1516 a, fx_s1516 b)
+{
+	return (fixed32)(((a << 8) / b) << 8); // ������ �ս�, ū ���ڿ� ���ؼ��� ������ ŭ
+}
+
+/*
+* long long���� ij�������� �ʰ� int������ ������� ������ ���� �ӵ��� ������.
+* ū ���� ��� �������� �ս��� ���� �� �ִ�.
+* Overflow ���ɼ��� �۾�����.
+*/
+
+fx_s1516 fx_s1516_longlong_div2(fx_s1516 a, fx_s1516 b)
+{
+	return (fixed32)(a / (b >> 16));
+}
+
+/*
+* div1�� ���� long long���� ij�������� �ʾұ� ������ ���� �ӵ��� ������.
+* Overflow�� �߻�Ȯ���� ����.
+* b(������ ��)�� ���� ���� ��� �������� �ս��� ũ��.
+*/
+
+fx_s1516 fx_s1516_longlong_sin(fx_s1516 fa)
+{
+	int sign = 1;
+	fixed32 ret0, diff;
+	int idx;
+	if (fa < 0)
+	{
+		sign = -1;
+		fa *= -1;
+	}
+	fa = fa % FX32_360;
+	if (fa >= FX32_180)
+	{
+		sign *= -1;
+		fa -= FX32_180;
+	}
+	if (fa > FX32_90)
+		fa = FX32_180 - fa;
+	idx = fa >> 16;
+	ret0 = fx32_SinTable[idx];
+	diff = fx32_SinTable[idx + 1] - ret0;
+	return (fixed32)(sign *(ret0 + ((diff*(fa & 0xFFFF)) >> 16)));
+}
+
+fx_s1516 fx_s1516_longlong_sqrt(fx_s1516 fa)
+{
+	int s = 16;
+	int fr, ans;
+	if (fa < 1024)
+	{
+		if (fa <= 0)
+			return(0);					// Error it must Return NaN
+		return ((sqrt_lut[fa]) >> 16);
+	}
+	do {
+		fa >>= 2;
+		--s;
+	} while (fa >= 1024 * 64);				// 6 bit of fractional Data
+	fr = fa & 0x3F;
+	fa >>= 6;
+	s -= 3;
+	ans = sqrt_lut[fa];
+	ans += ((sqrt_lut[fa + 1] - ans)*fr) >> 6;
+	return (fixed32)(ans >> s);
+}
\ No newline at end of file
diff --git a/fx_project/fx_s1516_longlong.h b/fx_project/fx_s1516_longlong.h
new file mode 100644
index 0000000000000000000000000000000000000000..eb2f2bf28bc986e0661c7703d401b97c784c3d9f
--- /dev/null
+++ b/fx_project/fx_s1516_longlong.h
@@ -0,0 +1,21 @@
+//fx_1516_longlong.h file
+#pragma once
+
+#include <stdio.h>
+
+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 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);
+extern fx_s1516 fx_s1516_longlong_mul3(fx_s1516 a, fx_s1516 b);
+extern fx_s1516 fx_s1516_longlong_mul4(fx_s1516 a, fx_s1516 b);
+extern fx_s1516 fx_s1516_longlong_div0(fx_s1516 a, fx_s1516 b);
+extern fx_s1516 fx_s1516_longlong_div1(fx_s1516 a, fx_s1516 b);
+extern fx_s1516 fx_s1516_longlong_div2(fx_s1516 a, fx_s1516 b);
+extern fx_s1516 fx_s1516_longlong_sin(fx_s1516 fa);
+extern fx_s1516 fx_s1516_longlong_sqrt(fx_s1516 fa);
\ No newline at end of file
diff --git a/fx_project/test.c b/fx_project/test.c
index 6d7b1041d5cfdee7e369f66a5cabd3f5127c621f..c38dc944002450ad9579444df4f67a357aa518ee 100644
--- a/fx_project/test.c
+++ b/fx_project/test.c
@@ -1,33 +1,118 @@
-#include "fx_s1516_double.h"
-
-#define fx_mul(a, b) ((a)*(b))
-
-/*
-Make first prototype fx_sXXYY_double.c with double and math.h
-define macro fx_sXXYY_double.h program test.c
-*/
+#include "fx_s1516_double.h"
+#include "fx_s1516_longlong.h"
 
 int main()
 {
-    fx_s1516 a = 131072;
-	fx_s1516 b = 65536;
-
-    double fa = fx_to_double(a);
-    double fb = fx_to_double(b);
-
-    printf("a : %d b : %d fa : %lf fb : %lf\noriginal a : %lf original b : %lf\n\n", a, b, fa, fb, double_to_fx(fa), double_to_fx(fb));
-    
-	printf("Add  : %-15d %lf\n", a + b, fx_s1516_add(fa, fb));
-    printf("Sub  : %-15d %lf\n", a - b, fx_s1516_sub(fa, fb));
-    printf("Mul  : %-15lld %lf\n", (long long)a * b, fx_s1516_mul(fa, fb));
-    printf("Div  : %-15lf %lf\n\n", (double)a / b, fx_s1516_div(fa, fb));
-    
-    printf("Sin  : %-15lf %lf\n", sin(degree_to_radian(a)), fx_s1516_sin(degree_to_radian(fa)));
-    printf("Sqrt : %-15lf %lf\n", sqrt(a), fx_s1516_sqrt(fa));
-    printf("Sqrt : %-15lf %lf\n", sqrt(b), fx_s1516_sqrt(fb));
-    printf("Pow  : %-15lld %lf\n", (long long)pow(a, 2), fx_s1516_pow(fa, 2));
-    printf("Log  : %-15lf %lf\n\n", baselog(a, e), fx_s1516_log(fa, e));
-
-    printf("PI : %f\n", fx_s1516_PI);
-    printf("INVERSE PI : %f\n", fx_s1516_INVERSE_PI);
-}
+	double sum = 0;
+	int i;
+
+#ifdef mul
+	fx_s1516 a = 30000;
+	fx_s1516 b = 50000;
+
+	double fa = fx_to_double(a);
+	double fb = fx_to_double(b);
+
+	printf("%lf\n", fx_s1516_double_mul(fa, fb) / P2_16);
+	printf("%d\n", fx_s1516_longlong_mul0(a, b));
+	printf("%d\n", fx_s1516_longlong_mul1(a, b));
+	printf("%d\n", fx_s1516_longlong_mul2(a, b));
+	printf("%d\n", fx_s1516_longlong_mul3(a, b));
+	printf("%d\n", fx_s1516_longlong_mul4(a, b));
+
+	for (i = 0; i < 1000000; i++)
+	{
+		sum += fx_s1516_double_mul(fa, fb);
+	}
+	for (i = 0; i < 1000000; i++)
+	{
+		sum += fx_s1516_longlong_mul0(a, b);
+	}
+	for (i = 0; i < 1000000; i++)
+	{
+		sum += fx_s1516_longlong_mul1(a, b);
+	}
+	for (i = 0; i < 1000000; i++)
+	{
+		sum += fx_s1516_longlong_mul2(a, b);
+	}
+	for (i = 0; i < 1000000; i++)
+	{
+		sum += fx_s1516_longlong_mul3(a, b);
+	}
+	for (i = 0; i < 1000000; i++)
+	{
+		sum += fx_s1516_longlong_mul4(a, b);
+	}
+#endif
+
+#ifdef div
+	fx_s1516 a = 1000000;
+	fx_s1516 b = 500000;
+
+	double fa = fx_to_double(a);
+	double fb = fx_to_double(b);
+
+	printf("%lf\n", fx_s1516_double_div(fa, fb) * P2_16);
+	printf("%d\n", fx_s1516_longlong_div0(a, b));
+	printf("%d\n", fx_s1516_longlong_div1(a, b));
+	printf("%d\n", fx_s1516_longlong_div2(a, b));
+
+	for (i = 0; i < 1000000; i++)
+	{
+		sum += fx_s1516_double_div(fa, fb);
+	}
+	for (i = 0; i < 1000000; i++)
+	{
+		sum += fx_s1516_longlong_div0(a, b);
+	}
+	for (i = 0; i < 1000000; i++)
+	{
+		sum += fx_s1516_longlong_div1(a, b);
+	}
+	for (i = 0; i < 1000000; i++)
+	{
+		sum += fx_s1516_longlong_div2(a, b);
+	}
+#endif
+
+#ifdef sin
+	fx_s1516 a = 30;
+
+	double fa = fx_to_double(a);
+
+	printf("%lf\n", fx_s1516_double_sin(degree_to_radian(fa)));
+	printf("%lf\n", fx_s1516_longlong_sin(a * P2_16) / fP2_16);
+
+	for (i = 0; i < 1000000; i++)
+	{
+		sum += fx_s1516_double_sin(degree_to_radian(fa));
+	}
+	for (i = 0; i < 1000000; i++)
+	{
+		sum += (fx_s1516_longlong_sin(a * P2_16) / fP2_16);
+	}
+#endif
+
+#ifdef sqrt
+	fx_s1516 a = 123;
+
+	double fa = fx_to_double(a);
+
+	printf("%lf\n", fx_s1516_double_sqrt(fa));
+	printf("%lf\n", fx_s1516_longlong_sqrt(a) / 256.0);
+
+	for (i = 0; i < 1000000; i++)
+	{
+		sum += fx_s1516_double_sqrt(fa);
+	}
+	for (i = 0; i < 1000000; i++)
+	{
+		sum += (fx_s1516_longlong_sqrt(a) / 256.0);
+	}
+#endif
+
+	printf("%lf", sum);
+
+	return 0;
+}
\ No newline at end of file