floating point test

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }