Commit ca2dde7f8d795b2d6f42a7db07f16409e56ac272

Thomas de Grivel 2023-05-18T22:05:40

wip sin

diff --git a/math/sin.c b/math/sin.c
new file mode 100644
index 0000000..37088a8
--- /dev/null
+++ b/math/sin.c
@@ -0,0 +1,46 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+#include "sin.h"
+
+s8 sin_u8 (u8 x)
+{
+  s16 i;
+  u8 n;
+  u8 side_bits;
+  s8 y;
+  side_bits = (sizeof(u8) * 8 - 3);
+  n = (1 << side_bits) - 1;
+  switch (x >> side_bits) {
+  case 0:
+    i = x & n;
+    y = (S16_MAX) i * S8_MAX / n * S8_MAX / sqrt(n * n + i * i / n / n) / S8_MAX;
+    return y;
+  case 1:
+    return 1;
+  case 2:
+    return 2;
+  case 3:
+    return 3;
+  case 4:
+    return 4;
+  case 5:
+    return 5;
+  case 6:
+    return 6;
+  case 7:
+    return 7;
+  }
+  assert(! "sin_u8: error");
+  errx(1, "sin_u8");
+  return 0;
+}
diff --git a/math/sin.h b/math/sin.h
new file mode 100644
index 0000000..84fa012
--- /dev/null
+++ b/math/sin.h
@@ -0,0 +1,20 @@
+/* c3
+ * Copyright 2022,2023 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+#ifndef SIN_H
+#define SIN_H
+
+#include "types.h"
+
+s8 sin_s8 (s8 x);
+
+#endif /* SIN_H */