こんにちは。水無月です。
実験でGauss型積分公式というのを実装してたのですが、その時に詰まったことがあるので書きます。
double Gauss_3(int N,double a,double b){
double h=(b-a)/(double)N;
long double sum=0;
double y_m[3] = {-sqrt(3/5),0,sqrt(3/5)};
double w_m[3] = {5/9,8/9,5/9};
for(int i=0;i<=N-1;i++){
for(int j=0;j<=2;j++){
sum = sum + f_x((y_m[j]+1)*h/2 + a + h*i)*w_m[j]*h/2;
}
}
return sum;
}
このコードです。出力結果は全部0。
解決策は簡単で
double w_m[3] = {5.0/9.0,8.0/9.0,5.0/9.0};
とするだけ。こんな初歩的なミスで時間を溶かしまくってしまった。doubleで宣言したので、中の要素も勝手にdouble/doubleになると思いこんでた。