最小自乗法

データから Σi 1 と  Σi xi と  Σi xi2 と  Σi xi3 と Σi xi4
を求めたいとき、
for( k=1; k<=データ個数; k++){ scanf("%f", &x); scanf("%f", &y); s[0] = s[0] + 1; s[1] = s[1] + x; s[2] = s[2] + x*x; s[3] = s[3] + x*x*x; s[4] = s[4] + x*x*x*x; t[0] = t[0] + y; t[1] = t[1] + y * x; t[2] = t[2] + y * x * x; } でもいいんだけど、xの 4乗 を x*x*x*x とか書くのはなんだかなあ、という方は xのj乗を求める数学関数           s[4] = s[4] + pow(x,4); を使ってもよいです。ただし! 0乗は避けた方がいいです。 たまたま x に 0 が入ってきたとき、0 の 0乗となってしまい、 システムによって動作が違ったり、止まったりするからです。 for( k=1; k<=データ個数; k++){ scanf("%f", &x); scanf("%f", &y); s[0] = s[0] + 1;  ここはあえてpow(x,j) の使用を避ける    for( j=1; j<=4; j++){ s[j] = s[j] + pow(x,j);     xのj乗を求める関数 } t[0] = t[0] + y;   for( j=1; j<=2; j++){ t[j] = t[j] + y * pow(x,j); }   } 1, x, x*x, x*x*x, x*x*x*x, ..は前の値にxをかけていくだけなので、 この部分を g とかおいて for( k=1; k<=データ個数; k++){ scanf("%f", &x); scanf("%f", &y);   g=1   for( j=0; j<=4; j++){ s[j] = s[j] + g; g は最初1, (2回目はx, 3回目はxの2乗, ...) g = g * x; 次の回に備えて x をかけておく }   g=1   for( j=0; j<=2; j++){ t[j] = t[j] + y * g; g = g * x; 次の回に備えて x をかけておく } } のようにかくこともできます。