2017-09-14 113 views
0

我有以下代码(m_threshold(在区间[0..1])和binSize(= 1000)是常数):怪异的结果差

std::vector<std::vector<ResidualEntry>> *bins = new std::vector<std::vector<ResidualEntry>>; 
... //filling vector 
int n = bins->size(); //is 27779 
double a = -(2 * (n * binSize - m_threshold * pointCount))/((n * n + n) * binSize); 
double a2 = -(2 * (bins->size() * binSize - m_threshold * pointCount))/((bins->size() * bins->size() + bins->size()) * binSize); 

aa2返回完全不同的数字。 a约为0.02,a2为-3.6e-5,这是正确的

为什么会发生这种情况?

+3

请创建一个[mcve]。在帮助中:_“寻求调试帮助的问题(”为什么这个代码不工作?“)必须包含所需的行为,特定的问题或错误以及在问题本身中重现问题所需的最短代码。”_ –

+2

It很高兴知道'binSize','m_threshold'和'pointCount'的类型。 – Bernard

+0

请检查您的等式*整数除法*。 *整数除法*截断结果。尝试在等式'double'中创建常量和变量。 –

回答

0

感谢@SirDarius:vector :: size()返回一个size_type类型的值,它通常应该是一个无符号的值,而int是一个有符号值,使得两条线完全不同。在使用size_t初始化n之后,它现在都可以工作。