C++でいくつかの統計関数、特に修正されたサンプル標準偏差関数を書いています。また、私のコードが期待通りに動作することを確認するために、アサーション付きのテストスイートを作成します。私は、オンライン計算機を使用して、テストスイートの正しい値を事前に決定し、assertキーワードを使用してstdev関数の出力値と比較します。私はまた、私の関数出力の値を出力しました。それらは、私がそれらをassertステートメントの中に入れるように設定したものと同じです。基本的にassert(c == c)を実行しているので、assertsはすべて真実であるべきですが、常に失敗します。私はここで私のテストスイートと私のstdev機能を与えています。引数がtrueのときに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;
}
アサート文が失敗し続ける理由を誰もが知っていますか?
理解しないでください。もしあなたができるなら、少なくとも私を助けてください。私が十分具体的でないなら、私はもっと詳細にしようとします。私はかなりの研究とデバッグを行いましたが、まだこれを理解することができませんでしたので、これは私の最後の希望です。 –
あなたはただ推測しましたか(c == c)? –
あなたは何を意味するのかよく分かりません。私はassert(c == c)を類推として使用し、各stdev値の値を2倍にして、assert引数の数値と正確に一致するようにしたので、最初のassert文でassert(1 == 1)完璧には良いですが、3番目と4番目のアサートは失敗しました。 –