diff options
| author | a1xd <[email protected]> | 2021-03-29 19:57:33 -0400 |
|---|---|---|
| committer | a1xd <[email protected]> | 2021-03-29 19:57:33 -0400 |
| commit | 11045335c14371847411b8fb5096f479e18fbf5e (patch) | |
| tree | b3d81ae9efcfeab78668d73d847682f1b185ad41 /common | |
| parent | add jump type (diff) | |
| download | rawaccel-11045335c14371847411b8fb5096f479e18fbf5e.tar.xz rawaccel-11045335c14371847411b8fb5096f479e18fbf5e.zip | |
add zero/inf/nan guards
Diffstat (limited to 'common')
| -rw-r--r-- | common/rawaccel.hpp | 8 | ||||
| -rw-r--r-- | common/utility.hpp | 12 |
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; +} |