diff --git a/fx_s1516.zip b/fx_s1516.zip
new file mode 100644
index 0000000000000000000000000000000000000000..70ef6a774dcd41ddffca313134466ff6361c5187
Binary files /dev/null and b/fx_s1516.zip differ
diff --git a/fx_s1516_longlong.c b/fx_s1516_longlong.c
new file mode 100644
index 0000000000000000000000000000000000000000..c8069f20b8f1e9aa861f977dcf36480ec4ba72bf
--- /dev/null
+++ b/fx_s1516_longlong.c
@@ -0,0 +1,37 @@
+//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
+    };
+
+fx_s1516_sin(fixed32 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 ( sign *( ret0 + ((diff*(fa&0xFFFF))>>16) )); 
+}
\ No newline at end of file
diff --git a/fx_s1516_longlong.h b/fx_s1516_longlong.h
new file mode 100644
index 0000000000000000000000000000000000000000..cc6b2c7c00edd2ee5661dc9afe3dcd0006bd8f5c
--- /dev/null
+++ b/fx_s1516_longlong.h
@@ -0,0 +1,16 @@
+#pragma once
+
+typedef long fixed32;
+typedef long long fixed64;
+
+#define mul0(a, b)   (fixed32) ((fixed64)(a) * (b) >> 16)
+#define mul1(a, b)   (fixed32) ((a) * (b) >> 16) // no fixed
+#define mul2(a, b)   (fixed32) ((a>>8) * (b>>8)) 
+#define mul3(a, b)   (fixed32) ((a>>10) * (b>>6))
+#define mul4(a, b)   (fixed32) ((a>>4) * (b>>4) >> 8)
+
+// mul에서 (fixed) conversion 안하면 : 숫자가 -1 부터 1로 (작게)정규화 되어있으면 곱셈이 빠르다. 
+// fixed도 붙였다 땠다 해보고
+// 시프트 연산도 나눠보고 
+// for 문도 많이 돌려보고
+// 값도 아주 작은 거부터 아주 큰거까지 다 넣어보고
\ No newline at end of file
diff --git a/longtest.c b/longtest.c
new file mode 100644
index 0000000000000000000000000000000000000000..01b019aac0e93eec221e4282edc5faab95ee147c
--- /dev/null
+++ b/longtest.c
@@ -0,0 +1,15 @@
+#include "fx_s1516_longlong.h"
+#include <stdio.h>
+
+int main()
+{
+    long long a = 3000000;
+    long long b = 5000000;
+
+    printf("mul0 : %d\n", mul1(a, b));
+    printf("mul1 : %d\n", mul1(a, b));
+    printf("mul2 : %d\n", mul2(a, b));
+    printf("mul3 : %d\n", mul3(a, b));
+    printf("mul4 : %d\n", mul4(a, b));
+
+}
\ No newline at end of file