J'ai une petite fonction, qui est supposée faire une prédiction basée sur un algorithme d'apprentissage automatique. La fonction ne fonctionnait pas, j'ai donc mis une instruction print pour vérifier la valeur, et tout d'un coup ça a commencé à fonctionner. Lorsque je commente la ligne d'impression, elle cesse de fonctionner. Y a-t-il quelque chose qui me manque pour expliquer pourquoi cela se produirait?Pourquoi imprimer une variable changer sa valeur?
int makePrediction(const InstanceT & instance, bool biased){
double dotProduct = (biased ? instance * _weights + _bias : instance * _weights);
std::cout << "dotProduct = " << dotProduct << std::endl;
return (dotProduct > 0 ? 1 : -1);
}
pour une raison quelconque produit un résultat différent alors
int makePrediction(const InstanceT & instance, bool biased){
double dotProduct = (biased ? instance * _weights + _bias : instance * _weights);
return (dotProduct > 0 ? 1 : -1);
}
et montrer que les résultats sont différents compte tenu des mêmes entrées, j'appelle cette fonction avec:
std::vector<InstanceT> _instances = populate_data() //this works for both versions
for (int i = 0; i < _instances.size(); i++){
std::cout << "prediction: " << makePrediction(_instances[i], true) << std::endl;
}
Toutes les pensées ?
Bonne question pour codereview.stackexchange.com –
Que voulez-vous dire par "ne fonctionnait pas"? Quel était le comportement attendu et observé? Veuillez spécifier l'entrée et la sortie exactes. –
std :: endl se vide généralement également. Votre code d'appel produit-il une sortie qui dépend de l'état du tampon de cout? Cela semble improbable. En quoi la sortie est-elle réellement différente? qu'est-ce qu'une valeur correcte de 'makePrediction' et qu'est-ce que ça donne quand c'est faux? –