【发布时间】:2014-03-11 15:48:06
【问题描述】:
我正在使用 C++ 实现超限插值算法 (http://en.wikipedia.org/wiki/Transfinite_interpolation)。一切看起来都很好,直到我尝试测试一些小数字时,结果看起来很奇怪且不正确。我想这一定与精度损失有关。代码是
for (int j = 0; j < Ny+1; ++j)
{
for (int i = 0; i < Nx+1; ++i)
{
int imax = Nx;
int jmax = Ny;
double CA1 = (double)i/imax; // s
double CB1 = (double)j/jmax; // t
double CA2 = 1.0-CA1; // 1-s
double CB2 = 1.0-CB1; // 1-t
point U = BD41[j]*CA2 + BD23[j]*CA1;
point V = BD12[i]*CB2 + BD34[i]*CB1;
point UV =
(BD12[0]*CB2 + BD41[jmax]*CB1)*CA2
+ (BD12[imax]*CB2 + BD23[jmax]*CB1)*CA1;
tfiGrid[k][j][i] = U + V - UV;
}
}
我猜当BD12[i](或BD34[i]或BD41[j]或BD23[j])非常小时,舍入误差或某些东西会累积并变得可以忽略不计。任何想法如何处理这种情况?
PS:尽管类似的问题已经被问了数百万次。我仍然无法弄清楚这与我的乘法或除法或减法有关吗?
【问题讨论】: