我正在用C++編寫一些統計函數,特別是修正後的樣本標準偏差函數。我還使用斷言編寫測試套件,以確保我的代碼按預期工作。我使用在線計算器爲我的測試套件預先確定正確的值,並使用assert關鍵字根據stdev函數的輸出值對其進行檢查。我還打印出了我的函數輸出的值,它們與我將它們設置在assert語句中相同。斷言應該都是真的,因爲我基本上運行斷言(C == C),但它總是失敗。我在這裏給我的測試套件以及我的stdev函數。參數爲真時C++聲明失敗
void test_stdev_function() {
vector<double> v1, v2, v3, v4;
v1 = {0, 1, 2};
v2 = {1, 1, 1};
v3 = {-2, -1, 1, 2};
v4 = {1, 1, 1, 10};
assert(stdev(v1) == 1);
assert(stdev(v2) == 0);
assert(stdev(v3) == 1.82574);
assert(stdev(v4) == 4.5);
cout << "function stdev pass!" << endl;
}
double stdev(std::vector<double> v)
{
double sum_square_diff = 0;
double avg = 0;
double sum = 0;
int n = v.size();
for (std::vector<double>::iterator itr = v.begin(); itr != v.end(); ++itr) {
sum+=*itr;
cout << "sum = " << sum << " *itr = " << *itr << endl;
}
avg = sum/n;
cout << "avg = " << avg << " ";
for (std::vector<double>::iterator itr = v.begin(); itr != v.end(); itr++) {
sum_square_diff+=pow((*itr - avg), 2);
}
double stdev = sqrt(sum_square_diff/(n-1));
cout << "stdev = " << stdev << endl;
return stdev;
}
任何人都知道assert語句爲什麼會失敗?
不明白爲什麼votes..if你向下認爲這是一個愚蠢的問題罰款。至少幫助我,如果你可以或者如果我不夠具體讓我知道我會盡量做得更詳細。我已經做了相當多的研究和調試,但仍然無法弄清楚,所以這是我最後的希望,認真。 –
你只是猜測斷言(c == c)? –
我不太明白你的意思。我用assert(c == c)作爲類比,我檢查了每個stdev值的值,並且它們與我的assert參數中的數值完全匹配,因此,在第一個assert語句中assert(1 == 1)這是完全正確的,但第三次和第四次斷言失敗。 –