From 853b5ee165106a57bc18e1e5543c8e16311af62f Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Tue, 6 Aug 2024 16:39:01 +0200 Subject: [PATCH] [cpp] Fix NaN in IKConstraint due to fp precision. dd - r * r might result in a negative value, even if dd == r * r, depending on compiler optimizations and operation order. --- spine-cpp/spine-cpp/src/spine/IkConstraint.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spine-cpp/spine-cpp/src/spine/IkConstraint.cpp b/spine-cpp/spine-cpp/src/spine/IkConstraint.cpp index 72904398b..daf3edcc7 100644 --- a/spine-cpp/spine-cpp/src/spine/IkConstraint.cpp +++ b/spine-cpp/spine-cpp/src/spine/IkConstraint.cpp @@ -213,7 +213,7 @@ void IkConstraint::apply(Bone &parent, Bone &child, float targetX, float targetY r0 = q / c2; r1 = c0 / q; r = MathUtil::abs(r0) < MathUtil::abs(r1) ? r0 : r1; - if (r * r <= dd) { + if (dd - r * r >= 0) { y = MathUtil::sqrt(dd - r * r) * bendDir; a1 = ta - MathUtil::atan2(y, r); a2 = MathUtil::atan2(y / psy, (r - l1) / psx);