From f218f1ea6258e18af38aee6469c70c787ff6de01 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Fri, 14 Apr 2017 07:11:26 +0200 Subject: tracker/steamvr: use double promotion for all arithmetic The computation order isn't defined so parts might only get promoted to double after arithmetic. Promote all parts manually before arithmetic. --- tracker-steamvr/steamvr.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'tracker-steamvr/steamvr.cpp') diff --git a/tracker-steamvr/steamvr.cpp b/tracker-steamvr/steamvr.cpp index 8998149c..d32c9d44 100644 --- a/tracker-steamvr/steamvr.cpp +++ b/tracker-steamvr/steamvr.cpp @@ -275,9 +275,11 @@ void steamvr::matrix_to_euler(double& yaw, double& pitch, double& roll, const vr using std::atan2; using std::sqrt; - yaw = atan2((double)-result.m[2][0], sqrt(double(result.m[2][1]) * result.m[2][1] + result.m[2][2] * result.m[2][2])); - pitch = atan2((double)result.m[2][1], (double)result.m[2][2]); - roll = atan2((double)result.m[1][0], (double)result.m[0][0]); + using d = double; + + yaw = atan2(d(-result.m[2][0]), sqrt(d(result.m[2][1]) * d(result.m[2][1]) + d(result.m[2][2]) * d(result.m[2][2]))); + pitch = atan2(d(result.m[2][1]), d(result.m[2][2])); + roll = atan2(d(result.m[1][0]), d(result.m[0][0])); // TODO: gimbal lock avoidance? } -- cgit v1.2.3