我在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