我有一个小函数,它应该根据机器学习算法进行预测。该功能无法正常工作,所以我输入了一个打印语句来检查该值,然后突然间它开始工作了。当我注释掉打印行时,它再次停止工作。关于为什么会发生这种情况,我是否遗漏了什么?
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;
}
有什么想法吗?
最佳答案
这通常有两个原因:
- 并发问题。如果您的程序是多线程的,您可以使用调试输出来掩盖竞争条件。尝试像 helgrind 这样的 MT 调试器。
- 损坏的堆栈。尝试在您的程序上运行 valgrind,看看它是否干净。
当然,这些都是非常通用的建议,但您必须更好地说明您的问题才能获得更好的建议:-)。
关于c++ - 为什么打印一个变量会改变它的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7552406/