Cosmetics
[opentx.git] / radio / src / maths.cpp
blobd5b70c7f169ef789290d277f96afbe1e3ae08b4a
1 /*
2 * Copyright (C) OpenTX
4 * Based on code named
5 * th9x - http://code.google.com/p/th9x
6 * er9x - http://code.google.com/p/er9x
7 * gruvin9x - http://code.google.com/p/gruvin9x
9 * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
21 #include "opentx.h"
23 uint16_t isqrt32(uint32_t n)
25 uint16_t c = 0x8000;
26 uint16_t g = 0x8000;
28 for (;;) {
29 if ((uint32_t)g*g > n)
30 g ^= c;
31 c >>= 1;
32 if(c == 0)
33 return g;
34 g |= c;
39 Division by 10 and rounding or fixed point arithmetic values
41 Examples:
42 value -> result
43 105 -> 11
44 104 -> 10
45 -205 -> -21
46 -204 -> -20
50 // djb2 hash algorithm
51 uint32_t hash(const void * ptr, uint32_t size)
53 const uint8_t * data = (const uint8_t *)ptr;
54 uint32_t hash = 5381;
55 for (uint32_t i=0; i<size; i++) {
56 hash = ((hash << 5) + hash) + data[i]; /* hash * 33 + c */
58 return hash;