summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/rawaccel.hpp8
-rw-r--r--common/utility.hpp12
2 files changed, 18 insertions, 2 deletions
diff --git a/common/rawaccel.hpp b/common/rawaccel.hpp
index 67b4e61..f6bc0fd 100644
--- a/common/rawaccel.hpp
+++ b/common/rawaccel.hpp
@@ -218,8 +218,12 @@ namespace rawaccel {
movement.y *= scale;
}
else {
- movement.x *= accels.x.apply(fabs(movement.x) * norm);
- movement.y *= accels.y.apply(fabs(movement.y) * norm);
+ if (movement.x != 0) {
+ movement.x *= accels.x.apply(fabs(movement.x) * norm);
+ }
+ if (movement.y != 0) {
+ movement.y *= accels.y.apply(fabs(movement.y) * norm);
+ }
}
}
}
diff --git a/common/utility.hpp b/common/utility.hpp
index 40bc7c4..d7b63cf 100644
--- a/common/utility.hpp
+++ b/common/utility.hpp
@@ -28,3 +28,15 @@ inline constexpr double maxsd(double a, double b) {
inline constexpr double clampsd(double v, double lo, double hi) {
return minsd(maxsd(v, lo), hi);
}
+
+// returns the unbiased exponent of x if x is normal
+inline int ilogb(double x)
+{
+ union { double f; unsigned long long i; } u = { x };
+ return static_cast<int>((u.i >> 52) & 0x7ff) - 0x3ff;
+}
+
+inline bool infnan(double x)
+{
+ return ilogb(x) == 0x400;
+}