diff --git a/modules/geom/src/vecmat2_op.cc b/modules/geom/src/vecmat2_op.cc
index ea0a4521376d510ccc9db2a0471fe275bd9833cd..221a6bbf2a4401da31dd118d04c86f4e0ca9723e 100644
--- a/modules/geom/src/vecmat2_op.cc
+++ b/modules/geom/src/vecmat2_op.cc
@@ -50,7 +50,7 @@ Mat2 Invert(const Mat2& m)
 
 Real Angle(const Vec2& v1, const Vec2& v2)
 {
-  return std::acos(Dot(v1,v2)/Length(v1)/Length(v2));
+  return std::acos(std::max(static_cast<Real>(-1.0),std::min(static_cast<Real>(1.0),Dot(v1,v2)/Length(v1)/Length(v2))));
 }
 
 Real SignedAngle(const Vec2& v1, const Vec2& v2)
@@ -63,7 +63,7 @@ Real SignedAngle(const Vec2& v1, const Vec2& v2)
   if(vc.z!=0.0){
     sign=vc.z/std::fabs(vc.z);
   }
-  return acos(Dot(v1,v2)/Length(v1)/Length(v2))*sign;
+  return acos(std::max(static_cast<Real>(-1.0),std::min(static_cast<Real>(1.0),Dot(v1,v2)/Length(v1)/Length(v2))))*sign;
 }
 
 Vec2 Rotate(const Vec2& v,Real ang)