Ho una piccola funzione, che dovrebbe fare una previsione basata su un algoritmo di apprendimento automatico. La funzione non funzionava, quindi ho inserito una dichiarazione di stampa per controllare il valore e all'improvviso ha iniziato a funzionare. Quando commento la linea di stampa, smette di funzionare di nuovo. C'è qualcosa che mi manca perché questo sarebbe successo?Perché stampare una variabile modifica il suo valore?
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);
}
per qualche ragione produce un risultato diverso poi
int makePrediction(const InstanceT & instance, bool biased){
double dotProduct = (biased ? instance * _weights + _bias : instance * _weights);
return (dotProduct > 0 ? 1 : -1);
}
e per dimostrare che i risultati sono diversi a parità di input, chiamo questa funzione con:
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;
}
Dei pensieri ?
Buona domanda per codereview.stackexchange.com –
Cosa intendi per "non funzionava"? Qual è stato il comportamento previsto e osservato? Si prega di specificare l'input e l'output esatti. –
std :: endl di solito scarica anche. Il tuo codice chiamante produce output che dipende dallo stato del buffer di cout? Sembra improbabile. Quanto è effettivamente diverso l'output; qual è il valore corretto di 'makePrediction' e cosa dà quando è sbagliato? –