From e26830bf71ca5968fc9d9d473966ea4b75120b56 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Thu, 3 Nov 2016 11:11:46 +0100 Subject: logic/tracker, dinput, tracker/joystick: fix rounding errors Issue: #487 Reported-by: @H-Bear-22 Closes #487 Also use a power of two for joy_axis_size. Floats are base 2. axis_max in tracker/joystick had a fencepost error. --- logic/tracker.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'logic') diff --git a/logic/tracker.cpp b/logic/tracker.cpp index dc148eba..fd6ecfe7 100644 --- a/logic/tracker.cpp +++ b/logic/tracker.cpp @@ -141,9 +141,13 @@ void Tracker::logic() { using std::fmod; using std::copysign; + using std::fabs; const double x = value(i); - value(i) = fmod(x + copysign(180, x), 360) - copysign(180, x); + if (fabs(x) - 1e-2 > 180) + value(i) = fmod(x - copysign(180, -x), 360) + copysign(180, x); + else + value(i) = clamp(x, -180, 180); } logger.write_pose(raw); // raw -- cgit v1.2.3