Mercurial > hg > qm-dsp
comparison maths/CosineDistance.cpp @ 74:769da847732b
* A few fixes prompted by vamp-plugin-tester
author | cannam |
---|---|
date | Mon, 08 Jun 2009 12:30:20 +0000 |
parents | dfe38135e4c7 |
children | e5907ae6de17 |
comparison
equal
deleted
inserted
replaced
73:dcb555b90924 | 74:769da847732b |
---|---|
17 | 17 |
18 double CosineDistance::distance(const vector<double> &v1, | 18 double CosineDistance::distance(const vector<double> &v1, |
19 const vector<double> &v2) | 19 const vector<double> &v2) |
20 { | 20 { |
21 dist = 1.0; dDenTot = 0; dDen1 = 0; dDen2 = 0; dSum1 =0; | 21 dist = 1.0; dDenTot = 0; dDen1 = 0; dDen2 = 0; dSum1 =0; |
22 double small = 1e-20; | |
22 | 23 |
23 //check if v1, v2 same size | 24 //check if v1, v2 same size |
24 if (v1.size() != v2.size()) | 25 if (v1.size() != v2.size()) |
25 { | 26 { |
26 cerr << "CosineDistance::distance: ERROR: vectors not the same size\n"; | 27 cerr << "CosineDistance::distance: ERROR: vectors not the same size\n"; |
32 { | 33 { |
33 dSum1 += v1[i]*v2[i]; | 34 dSum1 += v1[i]*v2[i]; |
34 dDen1 += v1[i]*v1[i]; | 35 dDen1 += v1[i]*v1[i]; |
35 dDen2 += v2[i]*v2[i]; | 36 dDen2 += v2[i]*v2[i]; |
36 } | 37 } |
37 dDenTot = sqrt(fabs(dDen1*dDen2)); | 38 dDenTot = sqrt(fabs(dDen1*dDen2)) + small; |
38 if(dDenTot == 0) | |
39 { | |
40 cerr << "CosineDistance::distance: WARNING: dividing by zero in cosine dist\n"; | |
41 return 1.0; | |
42 } | |
43 | |
44 dist = 1-((dSum1)/dDenTot); | 39 dist = 1-((dSum1)/dDenTot); |
45 return dist; | 40 return dist; |
46 } | 41 } |
47 } | 42 } |