前提・実現したいこと
google cloud shell ,cを用いて、0.5 + 25x - 200xx + 675xxx - 900xxxx + 400xxxx*x という関数を0~0.8までシンプソン1/3則を用いて、厳密な積分値1.880533になるまで分割数nを変化させるというプログラムを作っています。
発生している問題・エラーメッセージ
whileを使っているのですが、厳密な積分値になってもループが止まりません。
該当のソースコード
c
include<stdio.h>
include<math.h>
int main(){
double a, b, h, x, f, f0, fl;
double A, B, I;
int i, n;
a = 0, b = 0.8, n = 0; while(I != 1.880533){ h = (b - a) / (double)n; A = 0, B = 0; for(i = 2; i <= n - 2; i += 2){/*偶数*/ x = a + h * (double)i; f = 0.5 + 25 * x - 200 * pow(x,2) + 675 * pow(x,3) - 900 * pow(x,4) + 400 * pow(x,5); A += f; } for(i = 1; i <= n - 1; i += 2){/*奇数*/ x = a + h * (double)i; f = 0.5 + 25 * x - 200 * pow(x,2) + 675 * pow(x,3) - 900 * pow(x,4) + 400 * pow(x,5); B += f; } x = 0; f0 = 0.5 + 25 * x - 200 * pow(x,2) + 675 * pow(x,3) - 900 * pow(x,4) + 400 * pow(x,5); x = a + h * (double)n; fl = 0.5 + 25 * x - 200 * pow(x,2) + 675 * pow(x,3) - 900 * pow(x,4) + 400 * pow(x,5); I = h * (f0 + 4 * B + 2 * A + fl) / 3; printf("n=%d I=%lf\n", n, I); n += 2; } return 0;
}