changeset 6:904ce4614770 draft default tip

Add imath.ino for testing To run it, rename or delete main.c
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Thu, 22 Dec 2016 15:37:51 +0100
parents 48601e076cb7
children
files imath.ino
diffstat 1 files changed, 76 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imath.ino	Thu Dec 22 15:37:51 2016 +0100
@@ -0,0 +1,76 @@
+extern "C" {
+    #include "imath.h"
+}
+#include <math.h>
+
+void setup() {
+    Serial.begin(115200);
+
+    int16_t m = 1<<13;
+    float deg;
+    int16_t ideg;
+
+    for (int16_t i = -m; i <= m; i += 1 << 10) {
+        float f = float(i) / m;
+        deg = degrees(asin(f));
+        ideg = iasin(i);
+
+        Serial.print("asin(");
+        Serial.print(f);
+        Serial.print(")=");
+        Serial.print(deg);
+
+        Serial.print(" iasin(");
+        Serial.print(i);
+        Serial.print(")=");
+        Serial.print(ideg);
+
+        Serial.print(" diff ");
+        Serial.println(deg - float(ideg)/10);
+    }
+
+    for (int16_t i = 0; i <= m; i += 1 << 10) {
+        deg = sqrt(i);
+        ideg = isqrt(i);
+        Serial.print("sqrt(");
+        Serial.print(i);
+        Serial.print(")=");
+        Serial.print(deg);
+
+        Serial.print(" isqrt(");
+        Serial.print(i);
+        Serial.print(")=");
+        Serial.print(ideg);
+
+        Serial.print(" diff ");
+        Serial.println(deg - ideg);
+    }
+
+    for (int16_t i = 0; i <= m; i += 1 << 10) {
+        for (int16_t j = 0; j <= m; j += 1 << 10) {
+            deg = degrees(atan2(i, j));
+            ideg = iatan2(i, j);
+
+            Serial.print("atan2(");
+            Serial.print(i);
+            Serial.print(", ");
+            Serial.print(j);
+            Serial.print(")=");
+            Serial.print(deg);
+
+            Serial.print(" iatan2(");
+            Serial.print(i);
+            Serial.print(", ");
+            Serial.print(j);
+            Serial.print(")=");
+            Serial.print(ideg);
+
+            Serial.print(" diff ");
+            Serial.println(deg - float(ideg)/10);
+        }
+    }
+}
+
+void loop() {
+    delay(1000);
+}