floating point test

Dependencies:   mbed

Revision:
1:48013e8906f5
Parent:
0:1d7e5ce49ede
--- a/main.cpp	Thu Jun 01 18:53:16 2017 +0000
+++ b/main.cpp	Sun Nov 19 00:50:55 2017 +0000
@@ -4,21 +4,19 @@
 
 float buffer[LOOP_N];
 
-int main()
+Timer t;
+
+
+void floatTest()
 {
-    Timer t;
-    printf("\r\nFloating Point Test\r\n");
-    printf("op\ttotal\t1-p\r\n");
-    printf("-------------------------------\r\n");
-    
-    // div
+    // divf
     t.start();
     for (int i = 0; i < LOOP_N; i++) {
         buffer[i] = (float)i / LOOP_N;
     }
     t.stop();
     int elapse = t.read_us();
-    printf("div\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N);
+    printf("divf\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N);
     
     // sinf
     t.reset();
@@ -68,8 +66,83 @@
     }
     t.stop();
     elapse = t.read_us();
-    printf("sqrtf\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N);
-        
+    printf("sqrtf\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N);      
+}
+
+void doubleTest()
+{
+    // div
+    t.start();
+    for (int i = 0; i < LOOP_N; i++) {
+        buffer[i] = (double)i / LOOP_N;
+    }
+    t.stop();
+    int elapse = t.read_us();
+    printf("div\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N);
+    
+    // sin
+    t.reset();
+    t.start();
+    for (int i = 0; i < LOOP_N; i++) {
+        buffer[i] = sin((double)i / LOOP_N);
+    }
+    t.stop();
+    elapse = t.read_us();
+    printf("sin\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N);
+
+    // cos
+    t.reset();
+    t.start();
+    for (int i = 0; i < LOOP_N; i++) {
+        buffer[i] = cos((double)i / LOOP_N);
+    }
+    t.stop();
+    elapse = t.read_us();
+    printf("cos\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N);
+
+    // exp
+    t.reset();
+    t.start();
+    for (int i = 0; i < LOOP_N; i++) {
+        buffer[i] = exp((double)i / LOOP_N);
+    }
+    t.stop();
+    elapse = t.read_us();
+    printf("exp\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N);
+    
+    // log
+    t.reset();
+    t.start();
+    for (int i = 0; i < LOOP_N; i++) {
+        buffer[i] = log((double)i / LOOP_N);
+    }
+    t.stop();
+    elapse = t.read_us();
+    printf("log\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N);
+    
+    // sqrt
+    t.reset();
+    t.start();
+    for (int i = 0; i < LOOP_N; i++) {
+        buffer[i] = sqrt((double)i / LOOP_N);
+    }
+    t.stop();
+    elapse = t.read_us();
+    printf("sqrt\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N);      
+}
+
+int main()
+{
+    printf("\r\nFloating Point Test\r\n");
+    printf("float\r\n");
+    printf("op\ttotal\t1-op\r\n");
+    printf("-------------------------------\r\n");
+    floatTest();
+    
+    printf("\r\ndouble\r\n");
+    printf("op\ttotal\t1-op\r\n");
+    printf("-------------------------------\r\n");
+    doubleTest();
         
     printf("\r\nEnd.\r\n");    
 }