WMath.cpp
1 #include <stdint.h> 2 3 static uint32_t seed; 4 5 void randomSeed(uint32_t newseed) 6 { 7 if (newseed > 0) seed = newseed; 8 } 9 10 void srandom(uint32_t newseed) 11 { 12 seed = newseed; 13 } 14 15 uint32_t random(void) 16 { 17 int32_t hi, lo, x; 18 19 // the algorithm used in avr-libc 1.6.4 20 x = seed; 21 if (x == 0) x = 123459876; 22 hi = x / 127773; 23 lo = x % 127773; 24 x = 16807 * lo - 2836 * hi; 25 if (x < 0) x += 0x7FFFFFFF; 26 seed = x; 27 return x; 28 } 29 30 uint32_t random(uint32_t howbig) 31 { 32 if (howbig == 0) return 0; 33 return random() % howbig; 34 } 35 36 int32_t random(int32_t howsmall, int32_t howbig) 37 { 38 if (howsmall >= howbig) return howsmall; 39 int32_t diff = howbig - howsmall; 40 return random(diff) + howsmall; 41 } 42 43 long map(long x, long in_min, long in_max, long out_min, long out_max) 44 { 45 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; 46 } 47 48 unsigned int makeWord(unsigned int w) { return w; } 49 unsigned int makeWord(unsigned char h, unsigned char l) { return (h << 8) | l; } 50