floating point test

Dependencies:   mbed

Committer:
ryood
Date:
Sun Nov 19 00:50:55 2017 +0000
Revision:
1:48013e8906f5
Parent:
0:1d7e5ce49ede
float vs double

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryood 0:1d7e5ce49ede 1 #include "mbed.h"
ryood 0:1d7e5ce49ede 2
ryood 0:1d7e5ce49ede 3 #define LOOP_N (10000)
ryood 0:1d7e5ce49ede 4
ryood 0:1d7e5ce49ede 5 float buffer[LOOP_N];
ryood 0:1d7e5ce49ede 6
ryood 1:48013e8906f5 7 Timer t;
ryood 1:48013e8906f5 8
ryood 1:48013e8906f5 9
ryood 1:48013e8906f5 10 void floatTest()
ryood 0:1d7e5ce49ede 11 {
ryood 1:48013e8906f5 12 // divf
ryood 0:1d7e5ce49ede 13 t.start();
ryood 0:1d7e5ce49ede 14 for (int i = 0; i < LOOP_N; i++) {
ryood 0:1d7e5ce49ede 15 buffer[i] = (float)i / LOOP_N;
ryood 0:1d7e5ce49ede 16 }
ryood 0:1d7e5ce49ede 17 t.stop();
ryood 0:1d7e5ce49ede 18 int elapse = t.read_us();
ryood 1:48013e8906f5 19 printf("divf\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N);
ryood 0:1d7e5ce49ede 20
ryood 0:1d7e5ce49ede 21 // sinf
ryood 0:1d7e5ce49ede 22 t.reset();
ryood 0:1d7e5ce49ede 23 t.start();
ryood 0:1d7e5ce49ede 24 for (int i = 0; i < LOOP_N; i++) {
ryood 0:1d7e5ce49ede 25 buffer[i] = sinf((float)i / LOOP_N);
ryood 0:1d7e5ce49ede 26 }
ryood 0:1d7e5ce49ede 27 t.stop();
ryood 0:1d7e5ce49ede 28 elapse = t.read_us();
ryood 0:1d7e5ce49ede 29 printf("sinf\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N);
ryood 0:1d7e5ce49ede 30
ryood 0:1d7e5ce49ede 31 // cosf
ryood 0:1d7e5ce49ede 32 t.reset();
ryood 0:1d7e5ce49ede 33 t.start();
ryood 0:1d7e5ce49ede 34 for (int i = 0; i < LOOP_N; i++) {
ryood 0:1d7e5ce49ede 35 buffer[i] = cosf((float)i / LOOP_N);
ryood 0:1d7e5ce49ede 36 }
ryood 0:1d7e5ce49ede 37 t.stop();
ryood 0:1d7e5ce49ede 38 elapse = t.read_us();
ryood 0:1d7e5ce49ede 39 printf("cosf\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N);
ryood 0:1d7e5ce49ede 40
ryood 0:1d7e5ce49ede 41 // expf
ryood 0:1d7e5ce49ede 42 t.reset();
ryood 0:1d7e5ce49ede 43 t.start();
ryood 0:1d7e5ce49ede 44 for (int i = 0; i < LOOP_N; i++) {
ryood 0:1d7e5ce49ede 45 buffer[i] = expf((float)i / LOOP_N);
ryood 0:1d7e5ce49ede 46 }
ryood 0:1d7e5ce49ede 47 t.stop();
ryood 0:1d7e5ce49ede 48 elapse = t.read_us();
ryood 0:1d7e5ce49ede 49 printf("expf\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N);
ryood 0:1d7e5ce49ede 50
ryood 0:1d7e5ce49ede 51 // logf
ryood 0:1d7e5ce49ede 52 t.reset();
ryood 0:1d7e5ce49ede 53 t.start();
ryood 0:1d7e5ce49ede 54 for (int i = 0; i < LOOP_N; i++) {
ryood 0:1d7e5ce49ede 55 buffer[i] = logf((float)i / LOOP_N);
ryood 0:1d7e5ce49ede 56 }
ryood 0:1d7e5ce49ede 57 t.stop();
ryood 0:1d7e5ce49ede 58 elapse = t.read_us();
ryood 0:1d7e5ce49ede 59 printf("logf\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N);
ryood 0:1d7e5ce49ede 60
ryood 0:1d7e5ce49ede 61 // sqrtf
ryood 0:1d7e5ce49ede 62 t.reset();
ryood 0:1d7e5ce49ede 63 t.start();
ryood 0:1d7e5ce49ede 64 for (int i = 0; i < LOOP_N; i++) {
ryood 0:1d7e5ce49ede 65 buffer[i] = sqrtf((float)i / LOOP_N);
ryood 0:1d7e5ce49ede 66 }
ryood 0:1d7e5ce49ede 67 t.stop();
ryood 0:1d7e5ce49ede 68 elapse = t.read_us();
ryood 1:48013e8906f5 69 printf("sqrtf\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N);
ryood 1:48013e8906f5 70 }
ryood 1:48013e8906f5 71
ryood 1:48013e8906f5 72 void doubleTest()
ryood 1:48013e8906f5 73 {
ryood 1:48013e8906f5 74 // div
ryood 1:48013e8906f5 75 t.start();
ryood 1:48013e8906f5 76 for (int i = 0; i < LOOP_N; i++) {
ryood 1:48013e8906f5 77 buffer[i] = (double)i / LOOP_N;
ryood 1:48013e8906f5 78 }
ryood 1:48013e8906f5 79 t.stop();
ryood 1:48013e8906f5 80 int elapse = t.read_us();
ryood 1:48013e8906f5 81 printf("div\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N);
ryood 1:48013e8906f5 82
ryood 1:48013e8906f5 83 // sin
ryood 1:48013e8906f5 84 t.reset();
ryood 1:48013e8906f5 85 t.start();
ryood 1:48013e8906f5 86 for (int i = 0; i < LOOP_N; i++) {
ryood 1:48013e8906f5 87 buffer[i] = sin((double)i / LOOP_N);
ryood 1:48013e8906f5 88 }
ryood 1:48013e8906f5 89 t.stop();
ryood 1:48013e8906f5 90 elapse = t.read_us();
ryood 1:48013e8906f5 91 printf("sin\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N);
ryood 1:48013e8906f5 92
ryood 1:48013e8906f5 93 // cos
ryood 1:48013e8906f5 94 t.reset();
ryood 1:48013e8906f5 95 t.start();
ryood 1:48013e8906f5 96 for (int i = 0; i < LOOP_N; i++) {
ryood 1:48013e8906f5 97 buffer[i] = cos((double)i / LOOP_N);
ryood 1:48013e8906f5 98 }
ryood 1:48013e8906f5 99 t.stop();
ryood 1:48013e8906f5 100 elapse = t.read_us();
ryood 1:48013e8906f5 101 printf("cos\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N);
ryood 1:48013e8906f5 102
ryood 1:48013e8906f5 103 // exp
ryood 1:48013e8906f5 104 t.reset();
ryood 1:48013e8906f5 105 t.start();
ryood 1:48013e8906f5 106 for (int i = 0; i < LOOP_N; i++) {
ryood 1:48013e8906f5 107 buffer[i] = exp((double)i / LOOP_N);
ryood 1:48013e8906f5 108 }
ryood 1:48013e8906f5 109 t.stop();
ryood 1:48013e8906f5 110 elapse = t.read_us();
ryood 1:48013e8906f5 111 printf("exp\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N);
ryood 1:48013e8906f5 112
ryood 1:48013e8906f5 113 // log
ryood 1:48013e8906f5 114 t.reset();
ryood 1:48013e8906f5 115 t.start();
ryood 1:48013e8906f5 116 for (int i = 0; i < LOOP_N; i++) {
ryood 1:48013e8906f5 117 buffer[i] = log((double)i / LOOP_N);
ryood 1:48013e8906f5 118 }
ryood 1:48013e8906f5 119 t.stop();
ryood 1:48013e8906f5 120 elapse = t.read_us();
ryood 1:48013e8906f5 121 printf("log\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N);
ryood 1:48013e8906f5 122
ryood 1:48013e8906f5 123 // sqrt
ryood 1:48013e8906f5 124 t.reset();
ryood 1:48013e8906f5 125 t.start();
ryood 1:48013e8906f5 126 for (int i = 0; i < LOOP_N; i++) {
ryood 1:48013e8906f5 127 buffer[i] = sqrt((double)i / LOOP_N);
ryood 1:48013e8906f5 128 }
ryood 1:48013e8906f5 129 t.stop();
ryood 1:48013e8906f5 130 elapse = t.read_us();
ryood 1:48013e8906f5 131 printf("sqrt\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N);
ryood 1:48013e8906f5 132 }
ryood 1:48013e8906f5 133
ryood 1:48013e8906f5 134 int main()
ryood 1:48013e8906f5 135 {
ryood 1:48013e8906f5 136 printf("\r\nFloating Point Test\r\n");
ryood 1:48013e8906f5 137 printf("float\r\n");
ryood 1:48013e8906f5 138 printf("op\ttotal\t1-op\r\n");
ryood 1:48013e8906f5 139 printf("-------------------------------\r\n");
ryood 1:48013e8906f5 140 floatTest();
ryood 1:48013e8906f5 141
ryood 1:48013e8906f5 142 printf("\r\ndouble\r\n");
ryood 1:48013e8906f5 143 printf("op\ttotal\t1-op\r\n");
ryood 1:48013e8906f5 144 printf("-------------------------------\r\n");
ryood 1:48013e8906f5 145 doubleTest();
ryood 0:1d7e5ce49ede 146
ryood 0:1d7e5ce49ede 147 printf("\r\nEnd.\r\n");
ryood 0:1d7e5ce49ede 148 }