18 if (oldData.size() != newData.size())
23 double dotProduct = 0.0;
24 double oldSquaredSum = 0.0;
25 double newSquaredSum = 0.0;
27 for (
size_t i = 0; i < oldData.size(); i++)
29 const double oldElement =
static_cast<double>(oldData.at(i));
30 const double newElement =
static_cast<double>(newData.at(i));
32 dotProduct += oldElement * newElement;
33 oldSquaredSum += oldElement * oldElement;
34 newSquaredSum += newElement * newElement;
37 const double normProduct = std::sqrt(oldSquaredSum) * std::sqrt(newSquaredSum);
38 if (normProduct == 0.0)
40 return oldSquaredSum == newSquaredSum ? 1.0f : 0.0f;
43 const double cosineSimilarity = dotProduct / normProduct;
44 const double normalizedSimilarity = (cosineSimilarity / 2.0) + 0.5;
46 return static_cast<float>(normalizedSimilarity);