diff --git a/lec12/fx_s17_14.c b/lec12/fx_s17_14.c
new file mode 100644
index 0000000000000000000000000000000000000000..b8e3b4bce3a4df011b3ef98f7f0fc7bb2d5fd706
--- /dev/null
+++ b/lec12/fx_s17_14.c
@@ -0,0 +1,100 @@
+#include "fx_head.h"
+#include "fx_s17_14.h"
+
+#define fxADD(a,b)	((a)+(b))
+#define FX_Q_NUM_H	(FX_Q_NUM/2)
+#define FX_Q_NUM_HA	(FX_Q_NUM_H-FX_Q_NUM_H/2)
+#define FX_Q_NUM_HB (FX_Q_NUM_H/2)
+/*
+extern fixed fxAdd_float(), fxAdd_precision(), fxAdd_fair(), fxAdd_performance();
+extern fixed fxSub_float(), fxSub_precision(), fxSub_fair(), fxSub_performance();
+extern fixed fxMul_float(), fxMul_precision(), fxMul_fair(), fxMul_performance();
+extern fixed fxDiv_float(), fxDiv_precision(), fxDiv_fair(), fxDiv_performance();
+*/
+
+// float function
+fixed fxAdd_float(fixed a, fixed b)
+{
+	return fromFloat(toFloat(a) + toFloat(b));
+}
+
+fixed fxSub_float(fixed a, fixed b)
+{
+	return fromFloat(toFloat(a) - toFloat(b));
+}
+
+fixed fxMul_float(fixed a, fixed b) 
+{
+	return fromFloat(toFloat(a) * toFloat(b)); 
+}
+
+fixed fxDiv_float(fixed a, fixed b)
+{
+	return fromFloat(toFloat(a) / toFloat(b));
+}
+
+// precision function
+fixed fxAdd_precision(fixed a, fixed b)
+{
+	return fromFloat(toFloat(a) + toFloat(b));
+}
+
+fixed fxSub_precision(fixed a, fixed b)
+{
+	return fromFloat(toFloat(a) - toFloat(b));
+}
+
+fixed fxMul_precision(fixed a, fixed b) 
+{
+	long long la=a, lb=b, lc;
+	lc = la*lb; //오버플로우가 발생하지 않는다는 장점
+	lc >>= FX_Q_NUM;	
+	return (fixed) lc; 
+}
+
+fixed fxDiv_precision(fixed a, fixed b)
+{
+	return fromFloat(toFloat(a) / toFloat(b));
+}
+
+// fair function
+fixed fxAdd_fair(fixed a, fixed b)
+{
+	return fromFloat(toFloat(a) + toFloat(b));
+}
+
+fixed fxSub_fair(fixed a, fixed b)
+{
+	return fromFloat(toFloat(a) - toFloat(b));
+}
+
+fixed fxMul_fair(fixed a, fixed b) 
+{
+	return ((a>>FX_Q_NUM_HA)*(b>>FX_Q_NUM_HB))>>FX_Q_NUM_H; 
+}
+
+fixed fxDiv_fair(fixed a, fixed b)
+{
+	return fromFloat(toFloat(a) / toFloat(b));
+}
+
+// performance function
+fixed fxAdd_performance(fixed a, fixed b)
+{
+	return fromFloat(toFloat(a) + toFloat(b));
+}
+
+fixed fxSub_performance(fixed a, fixed b)
+{
+	return fromFloat(toFloat(a) - toFloat(b));
+}
+
+fixed fxMul_performance(fixed a, fixed b) 
+{
+	return (a>>FX_Q_NUM_H)*(b>>FX_Q_NUM_H); 
+}
+
+fixed fxDiv_performance(fixed a, fixed b)
+{
+	return fromFloat(toFloat(a) / toFloat(b));
+}
diff --git a/lec12/fx_s17_14.h b/lec12/fx_s17_14.h
new file mode 100644
index 0000000000000000000000000000000000000000..c7900f127da0cc2e5e33a9428fc9be885d7f5cf6
--- /dev/null
+++ b/lec12/fx_s17_14.h
@@ -0,0 +1,37 @@
+#include "fx_head.h"
+#include <math.h>
+
+#define FX_POINT		FX_S17_14
+
+#define FX_Q_NUM		(FX_POINT & 0xFF)		// 14
+
+// If you want calculate with high precision set 64
+#define FX_SYSTEM_INTEGER 	64				// 32 or 64
+#define FX_SYSTEM_FLOAT		64				// 32 or 64
+
+#define FX_DATA_TYPE		signed int
+
+
+typedef int fx_s17_14;
+typedef fx_s17_14 fixed; 
+
+#define  fromDouble(d)  	((fixed)((d)*DOUBLE_Q_VALUE))
+#define  toDouble(d)    	((double)(d)*DOUBLE_1_Q_VALUE)
+#define  fromFloat(d)  		((fixed)((d)*FLOAT_Q_VALUE))
+#define  toFloat(d)    		((float)(d)*FLOAT_1_Q_VALUE)
+
+// CONSTANTS
+#define  FLOAT_Q_VALUE 		(float)(1<<FX_Q_NUM)		
+#define  DOUBLE_Q_VALUE 	(double)(1<<FX_Q_NUM)
+#define  FLOAT_1_Q_VALUE 	(float)(1.0f/FLOAT_Q_VALUE)
+#define  DOUBLE_1_Q_VALUE 	(double)(1.0f/DOUBLE_Q_VALUE) 
+#define  FX_PI			fromDOUBLE(M_PI)
+
+// One of FX_OP_FLOAT, FX_OP_PRECISION, FX_OP_FAIR, FX_OP_PERFORMANCE 
+#define FX_OP_PREFERENCE	FX_OP_FLOAT
+
+extern fixed fxAdd_float(), fxAdd_precision(), fxAdd_fair(), fxAdd_performance(); 
+extern fixed fxSub_float(), fxSub_precision(), fxSub_fair(), fxSub_performance(); 
+extern fixed fxMul_float(), fxMul_precision(), fxMul_fair(), fxMul_performance(); 
+extern fixed fxDiv_float(), fxDiv_precision(), fxDiv_fair(), fxDiv_performance(); 
+
diff --git a/lec12/project_main.c b/lec12/project_main.c
new file mode 100644
index 0000000000000000000000000000000000000000..15694be7c878233f11d3ec98d28c7377b32d6fcb
--- /dev/null
+++ b/lec12/project_main.c
@@ -0,0 +1,11 @@
+#include "fx_s17_14.h"
+#include <stdio.h>
+
+
+int main()
+{
+
+	printf("%f : %d\n",1.0, fromDouble(1.0)); 
+	printf("%f : %f\n",1.3*0.3, toFloat(fxMul_float(fromDouble(1.3),fromDouble(0.3)))) ; 
+
+}