我在NVIDIA的CUDA SDK示例中找到了此代碼。浮點精度細微差別
void computeGold(float* reference, float* idata, const unsigned int len)
{
reference[0] = 0;
double total_sum = 0;
unsigned int i;
for(i = 1; i < len; ++i)
{
total_sum += idata[i-1];
reference[i] = idata[i-1] + reference[i-1];
}
// Here it should be okay to use != because we have integer values
// in a range where float can be exactly represented
if (total_sum != reference[i-1])
printf("Warning: exceeding single-precision accuracy. Scan will be inaccurate.\n");
}
//(C) Nvidia Corp
有人可以告訴我一個警告將被打印的情況,最重要的是,爲什麼。
但我的問題是,計算黃金內部的計算都以完全相同的順序添加完全相同的數字,哪裏出錯? – 0fnt 2010-06-16 12:52:50
@ user247077:你是說你看到警告,但不是所有的時間 - 即使是同一組數字? – 2010-06-16 14:13:05
不,我要說的是,如果這組數字是x1,x2,...,xn,那麼在這兩種情況下,實際添加和參考添加,我將它們以相同的順序相加。那爲什麼我得到一個錯誤。如果你能回答這個問題,我會很感激。謝謝。 PS我很抱歉回覆晚了。我認爲,stackoverflow會通知我的評論。 – 0fnt 2010-06-21 05:56:19