Почему печать переменной меняет свое значение? - PullRequest
5 голосов
/ 26 сентября 2011

У меня есть небольшая функция, которая должна делать прогноз на основе алгоритма машинного обучения.Функция не работала, поэтому я добавил оператор печати, чтобы проверить значение, и внезапно он начал работать.Когда я закомментирую строку печати, она снова перестает работать.Я что-то упускаю из-за того, почему это произошло?

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 );
}

по какой-то причине дает другой результат, чем

int makePrediction( const InstanceT & instance, bool biased ){
  double dotProduct = ( biased ? instance * _weights + _bias : instance * _weights ); 
  return ( dotProduct > 0 ? 1 : -1 );
}

, и показывает, что результаты отличаются при одинаковыхвходы, я вызываю эту функцию с:

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;
}

Есть мысли?

1 Ответ

4 голосов
/ 26 сентября 2011

Это часто происходит по двум причинам:

  1. Проблемы параллелизма. Если ваша программа многопоточная, вы маскируете условия гонки с помощью отладочной информации. Попробуйте отладчик MT, например helgrind.
  2. Сломанные стеки. Попробуйте запустить valgrind в своей программе и посмотрите, будет ли она чистой.

Это, конечно, довольно общие советы, но вам нужно будет уточнить свой вопрос, чтобы получить лучший совет:

...