-
Notifications
You must be signed in to change notification settings - Fork 0
/
MathUtils.cpp
40 lines (36 loc) · 947 Bytes
/
MathUtils.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <limits>
#include <cmath>
#include <bitset>
/**
* Find the closest power of 2 for the specified number
* @param number
* @return
*/
int nearest2nValue(int number) {
double n = 0, distance = std::numeric_limits<double>::max(), dNumber = (double) number;
while (abs(dNumber - pow((double) 2, n + 1)) < distance) {
n += 1;
distance = abs(number - pow((double) 2, n));
}
return (int) pow((double) 2, n);
}
/**
* Checks if the specified number is a power of 2
* @param number
* @return
*/
bool isPowerOfTwo(int number) {
return (number != 0) && ((number & (number - 1)) == 0);
}
/**
* Calculates the Hamming distance between two floats x and y. The Hamming distance is the number of different bits at
* each position
* @param x
* @param y
* @return
*/
float hammingDistance(float x, float y) {
std::bitset<32> xBits(x), yBits(y);
xBits ^= yBits;
return (float) xBits.count();
}