Ich versuche, einen K-nn-Klassifikator zu implementieren. Ein Teil dieses Problems besteht darin, den euklidischen Abstand von einem Beispiel zu einem anderen zu erhalten. Ich habe Probleme, es zu berechnen, weil sum
schließlich NaN ist.NaN in C++ warum?
Das Problem ist in diesem Codeblock:
for(int i=0;i<fdataset.size();i++){
float sum=0;
for(int k=0;k<fdataset[i].size();k++){
if(mask[k]){
sum+=(fdataset[i][k]-example[k])*(fdataset[i][k]-example[k]);
}
}
results[i]=sqrt(sum);
}
fdataset
ist ein vector< vector<float> >
und example
vector<float>
ist. Es sollte keine Probleme geben. Also, warum habe ich dieses Problem?
Danke!
"Wenn das Argument kleiner als -0 ist, wird FE_INVALID ausgelöst und NaN wird zurückgegeben." aus ['std :: sqrt'] (http://en.cppreference.com/w/cpp/numeric/math/sqrt) – Maikel
@Maikel wann kann' sum' negativ sein? '(fdataset [i] [k] -Beispiel [k]) * (fdataset [i] [k] -Beispiel [k])' ist immer positiv oder "0" – YnkDK
Ist Summe NaN oder enthalten die Ergebnisse NaN? – stefaanv