diff --git a/0804/fx_s1516_double.h b/0804/fx_s1516_double.h
new file mode 100644
index 0000000000000000000000000000000000000000..3f2af8f8ff7a9f277046632053d2f28364b04981
--- /dev/null
+++ b/0804/fx_s1516_double.h
@@ -0,0 +1,28 @@
+#pragma once
+
+typedef int fx_s1516;
+
+#include <stdio.h>
+#define _USE_MATH_DEFINES
+#include <math.h>
+#define P2_16 65536.0f
+#define e M_E
+#define fx_s1516_PI M_PI
+#define fx_s1516_INVERSE_PI 1/M_PI
+#define degree_to_radian(a) ((a) * M_PI / 180)
+#define fx_to_double(a) ((double)(a) / P2_16)
+#define double_to_fx(a) ((a) * P2_16)
+#define fx_s1516_add(a, b) double_to_fx((a) + (b))
+#define fx_s1516_sub(a, b) double_to_fx((a) - (b))
+#define fx_s1516_mul(a, b) double_to_fx((a) * (b) * P2_16)
+#define fx_s1516_div(a, b) double_to_fx((a) / (b) / P2_16)
+#define fx_s1516_sin(a) double_to_fx(sin(a * P2_16) / (P2_16))
+#define fx_s1516_sqrt(a) double_to_fx(sqrt(a) / sqrt(P2_16))
+#define fx_s1516_pow(a, b) double_to_fx(pow(a, (double)b) * pow(P2_16, (double)b - 1))
+#define fx_s1516_log(a, b) double_to_fx(baselog(a * P2_16, b) / (P2_16))
+
+
+double baselog(double a, double base)
+{
+	return log(a) / log(base);
+}
\ No newline at end of file
diff --git a/0804/test.c b/0804/test.c
new file mode 100644
index 0000000000000000000000000000000000000000..ac582138b99896f02c0ae18b482a4e9b8b61ff40
--- /dev/null
+++ b/0804/test.c
@@ -0,0 +1,31 @@
+#include "fx_s1516_double.h"
+
+/*
+make first prototype fx_sxxyy_double.c with double and math.h
+define macro fx_sxxyy_double.h program test.c
+*/
+
+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);
+}