喫茶佐天

祈り2023

初心者なのでC言語で数値計算しようとして詰まったという話(1)

こんにちは。水無月です。

実験で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になると思いこんでた。