2017-09-14 109 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之後,它現在都可以工作。