Ryo Od
/
FloatingPointTest
floating point test
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 #include "mbed.h" 00002 00003 #define LOOP_N (10000) 00004 00005 float buffer[LOOP_N]; 00006 00007 Timer t; 00008 00009 00010 void floatTest() 00011 { 00012 // divf 00013 t.start(); 00014 for (int i = 0; i < LOOP_N; i++) { 00015 buffer[i] = (float)i / LOOP_N; 00016 } 00017 t.stop(); 00018 int elapse = t.read_us(); 00019 printf("divf\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N); 00020 00021 // sinf 00022 t.reset(); 00023 t.start(); 00024 for (int i = 0; i < LOOP_N; i++) { 00025 buffer[i] = sinf((float)i / LOOP_N); 00026 } 00027 t.stop(); 00028 elapse = t.read_us(); 00029 printf("sinf\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N); 00030 00031 // cosf 00032 t.reset(); 00033 t.start(); 00034 for (int i = 0; i < LOOP_N; i++) { 00035 buffer[i] = cosf((float)i / LOOP_N); 00036 } 00037 t.stop(); 00038 elapse = t.read_us(); 00039 printf("cosf\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N); 00040 00041 // expf 00042 t.reset(); 00043 t.start(); 00044 for (int i = 0; i < LOOP_N; i++) { 00045 buffer[i] = expf((float)i / LOOP_N); 00046 } 00047 t.stop(); 00048 elapse = t.read_us(); 00049 printf("expf\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N); 00050 00051 // logf 00052 t.reset(); 00053 t.start(); 00054 for (int i = 0; i < LOOP_N; i++) { 00055 buffer[i] = logf((float)i / LOOP_N); 00056 } 00057 t.stop(); 00058 elapse = t.read_us(); 00059 printf("logf\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N); 00060 00061 // sqrtf 00062 t.reset(); 00063 t.start(); 00064 for (int i = 0; i < LOOP_N; i++) { 00065 buffer[i] = sqrtf((float)i / LOOP_N); 00066 } 00067 t.stop(); 00068 elapse = t.read_us(); 00069 printf("sqrtf\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N); 00070 } 00071 00072 void doubleTest() 00073 { 00074 // div 00075 t.start(); 00076 for (int i = 0; i < LOOP_N; i++) { 00077 buffer[i] = (double)i / LOOP_N; 00078 } 00079 t.stop(); 00080 int elapse = t.read_us(); 00081 printf("div\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N); 00082 00083 // sin 00084 t.reset(); 00085 t.start(); 00086 for (int i = 0; i < LOOP_N; i++) { 00087 buffer[i] = sin((double)i / LOOP_N); 00088 } 00089 t.stop(); 00090 elapse = t.read_us(); 00091 printf("sin\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N); 00092 00093 // cos 00094 t.reset(); 00095 t.start(); 00096 for (int i = 0; i < LOOP_N; i++) { 00097 buffer[i] = cos((double)i / LOOP_N); 00098 } 00099 t.stop(); 00100 elapse = t.read_us(); 00101 printf("cos\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N); 00102 00103 // exp 00104 t.reset(); 00105 t.start(); 00106 for (int i = 0; i < LOOP_N; i++) { 00107 buffer[i] = exp((double)i / LOOP_N); 00108 } 00109 t.stop(); 00110 elapse = t.read_us(); 00111 printf("exp\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N); 00112 00113 // log 00114 t.reset(); 00115 t.start(); 00116 for (int i = 0; i < LOOP_N; i++) { 00117 buffer[i] = log((double)i / LOOP_N); 00118 } 00119 t.stop(); 00120 elapse = t.read_us(); 00121 printf("log\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N); 00122 00123 // sqrt 00124 t.reset(); 00125 t.start(); 00126 for (int i = 0; i < LOOP_N; i++) { 00127 buffer[i] = sqrt((double)i / LOOP_N); 00128 } 00129 t.stop(); 00130 elapse = t.read_us(); 00131 printf("sqrt\t%d\t%f\r\n", elapse, (float)elapse / LOOP_N); 00132 } 00133 00134 int main() 00135 { 00136 printf("\r\nFloating Point Test\r\n"); 00137 printf("float\r\n"); 00138 printf("op\ttotal\t1-op\r\n"); 00139 printf("-------------------------------\r\n"); 00140 floatTest(); 00141 00142 printf("\r\ndouble\r\n"); 00143 printf("op\ttotal\t1-op\r\n"); 00144 printf("-------------------------------\r\n"); 00145 doubleTest(); 00146 00147 printf("\r\nEnd.\r\n"); 00148 }
Generated on Thu Jul 14 2022 09:10:10 by 1.7.2