/ teensy3 / WMath.cpp
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