サイズがほぼ 1000 の 2 つの整数ベクトルがあり、これから行うことは、これら 2 つのベクトルの平方整数の合計が同じかどうかを確認することです。したがって、次のコードを記述します。
std::vector<int> array1;
std::vector<int> array2;
... // initialize array1 and array2, and in the experiment all elements
// in the two vectors are the same but the sequence of elements may be different.
// For example: array1={1001, 2002, 3003, ....}
// array2={2002, 3003, 1001, ....}
assert(array1.size() == array2.size());
float sum_array1 = 0;
float sum_array2 = 0;
for(int i=0; i<array1.size(); i++)
sum_array1 +=array1[i]*array1[i];
for(int i=0; i<array2.size(); i++)
sum_array2 +=array2[i]*array2[i];
sum_array1
私はそれが と等しいはずだと思っていsum_array2
ますが、実際、私のアプリケーションでは、それらが異なることがわかりましsum_array1 = 1.2868639e+009
たsum_array2 = 1.2868655e+009
。次に行ったことは、次のコードが示すように、の型を double 型に変更することですsum_array1
。sum_array2
double sum_array1 = 0;
double sum_array2 = 0;
for(int i=0; i<array1.size(); i++)
sum_array1 +=array1[i]*array1[i];
for(int i=0; i<array2.size(); i++)
sum_array2 +=array2[i]*array2[i];
この時間 sum_array1
は に等しいsum_array2
sum_array1=sum_array2=1286862225.0000000
です。私の質問は、なぜそれが起こり得るかです。ありがとう。