I recently had some math optimizations that required improving the performance of POW operations.
these numbers were only of powers of 2. and only went up to 48.
this is currently about 100x the speed of the normal method. it would be 1000x or more but it is not in ram.
so i created a table, and decided the fastest way to store them without using much memory was to create this table so it would be in progmem, for Arduino that is stored in its flash for review later.
this may be modified further with a predictive cache, or a compressed table store as getting values returned from flash is slower than ram, and ram is valuable on Arudino. for processors with ram to spare this table should be located in ram.
here is the function that pulls values to be used in equations. this table processes 2^x with x being 0 to 63
float SimplePowFast2s(uint8_t x){//we cause 2^x
return pgm_read_float_near(power_of2table+ x);
}
here is the table
const float power_of2table[] PROGMEM = {
1,
2,
4,
8,
16,
32,
64,
128,
256,
512,
1024,
2048,
4096,
8192,
16384,
32768,
65536,
131072,
262144,
524288,
1048576,
2097152,
4194304,
8388608,
16777216,
33554432,
67108864,
134217728,
268435456,
536870912,
1073741824,
2147483648,
4294967296,
8589934592,
17179869184,
34359738368,
68719476736,
137438953472,
274877906944,
549755813888,
1099511627776,
2199023255552,
4398046511104,
8796093022208,
17592186044416,
35184372088832,
70368744177664,
140737488355328,
281474976710656,
562949953421312,
1125899906842624,
2251799813685248,
4503599627370496,
9007199254740992,
18014398509481984,
36028797018963970,
72057594037927940,
144115188075855870,
288230376151711740,
576460752303423500,
1152921504606847000,
2305843009213694000,
4611686018427388000,
9223372036854776000,
};
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.