累乗nのさまざまな値と定数aの関数の積分を見つけるプログラムを作成しています。私のプログラムは正しく機能しているようですが、結果に小さな丸め誤差が発生し、その理由がわかりません。私の友人も同じプログラムを作成していて、彼の結果は私のものとは少し異なるため、エラーが発生していることを知っています。電卓で積分を行うと、彼の結果は間違いなく彼に近い値になります。以下は私の結果とa=2とn=1の彼の結果です。
彼の結果:0.189070
私の結果:0.189053
iveは、私が考えることができるほとんどすべてを調べてキャストしようとしましたが、それでも、どこからエラーが発生したかを理解できません。:p
私のプログラム:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#define debug 0
#define N (double)10000
double Integrand(double x, int a, int n);
double Integral(double *x, double dx, int a, int n);
int main (int argc, char* argv[])
{
int j,a,n=0,count=0,size=(int)N;
double dx=1/N, x[size];
sscanf(argv[1], "%d", &a);
for(j=0;j<N;j++) {
x[j]=(double)(j)*dx;
}
for(n=1;n<=10;n++) {
printf("n is %d integral is %lf\n",n,Integral(x,dx,a,n));
}
return(EXIT_SUCCESS);
}
double Integral(double *x, double dx, int a, int n)
{
int i;
double result=0;
for(i=0;i<N;i++) {
result +=(double)((Integrand((double)x[i],a,n))*dx);
}
return(result);
}
double Integrand(double x, int a, int n)
{
double result;
result=(double)(((pow(x,(double)n))/(x+(double)a)));
return(result);
}