From 01f9fe1670e1c6a1bbd0de180dd76c859692d8e2 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Fri, 8 Apr 2022 01:23:49 +0200 Subject: [PATCH] MeshTools: avoid unnecessary precision loss in boundingSphereBouncingBubble() --- src/Magnum/MeshTools/BoundingVolume.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Magnum/MeshTools/BoundingVolume.cpp b/src/Magnum/MeshTools/BoundingVolume.cpp index 9e1bac909..bb0d1b107 100644 --- a/src/Magnum/MeshTools/BoundingVolume.cpp +++ b/src/Magnum/MeshTools/BoundingVolume.cpp @@ -54,7 +54,8 @@ Containers::Pair boundingSphereBouncingBubble(const Containers:: const Float ds = (p - center).dot(); if(ds > radiusSquared) { const Float alphaInv = radius/Math::sqrt(ds); - const Float alphaSqInv = alphaInv*alphaInv; + /* Not using alphaInv*alphaInv since that may lose precision */ + const Float alphaSqInv = radiusSquared/ds; radius = (1.0f/alphaInv + alphaInv)*0.5f*radius; center = ((1.0f + alphaSqInv)*center + (1.0f - alphaSqInv)*p)*0.5f; radiusSquared = radius*radius;