Skip to content
Snippets Groups Projects
Commit 780be114 authored by Christian Dreher's avatar Christian Dreher
Browse files

Deal with possible numerical inaccuracies.

parent 1798eb1b
No related branches found
No related tags found
No related merge requests found
......@@ -30,10 +30,13 @@ namespace simox::math
angular_similarity(
const Eigen::Matrix<float, rows, 1>& v1,
const Eigen::Matrix<float, rows, 1>& v2)
noexcept
{
const float angular_distance = std::acos(cosine_similarity(v1, v2)) / M_PI;
return 1.f - angular_distance;
const float cosine_similarity = math::cosine_similarity(v1, v2);
const float angular_distance = std::acos(cosine_similarity) / M_PI;
const float angular_similarity = 1.f - angular_distance;
// Clamp to deal with numerical inaccuracies.
return std::clamp(angular_similarity, 0.f, 1.f);
}
}
......@@ -34,7 +34,10 @@ namespace simox::math
throw std::logic_error{"Cosine similarity is not defined on operands which are zero."};
}
return v1.dot(v2) / (v1.norm() * v2.norm());
const float cosine_similarity = v1.dot(v2) / (v1.norm() * v2.norm());
// Clamp to deal with numerical inaccuracies.
return std::clamp(cosine_similarity, -1.f, 1.f);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment