Код: Выделить всё
double long CosineDistance(const vector& a,const vector& b){
double long num = 0.0, den1 = 0.0, den2 = 0.0 ;
for(int i = 0; i < a.size(); ++i) {
num+=a[i]*b[i] ;
den1+=a[i]*a[i] ;
den2+=b[i]*b[i] ;
}
return num/(sqrt(den1)*sqrt(den2));
}
< /code>
И он работает, как и с небольшими числами: < /p>
и.e. Передача {1,3,8}
Теперь проект, который я строю, использует большие числа (они являются хэшковыми строками) и используют такие цифры
Код: Выделить всё
{3337682107,92015386,2479056,2478761,4153082938}
и
Код: Выделить всё
{104667454,92015386,150359366,2225484100,2479056}
он возвращает меня 1, что, я думаю, является приближением 0,968597, согласно Wolframalpha.>
Подробнее здесь: https://stackoverflow.com/questions/373 ... similarity