im은 서로 다른 값의 n 및 상수 값에 대한 함수의 적분을 찾는 프로그램입니다. 내 프로그램이 올바르게 작동하는 것 같지만 내 결과에서 작은 반올림 오류가 발생하고 이유를 파악할 수 없습니다. 나는 내 친구가 같은 프로그램을 만들고 있고 그의 결과가 나의 것과 약간 다르다는 것을 알고 있으며, 계산기에 통합을하는 것과 같은 결과는 그의 가치에 훨씬 가깝다. 아래는 내 결과이고 a = 2, n = 1이다.c 통합 프로그램의 반올림 오류
그의 결과 : 0.189070
내 결과 : 0.189053
필자 내가 생각할 수 있지만 통해가는 모든 것에 대해 단지 캐스팅하려고 여전히 못할 워크 아웃 경우 메신저 곳 메신저 지적에 도움에서 내 오류가 멍청이가되어 주시면 대단히 감사하겠습니다! : 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);
}
동일한 컴파일 플랫폼을 사용하고 있습니까? http://stackoverflow.com/q/13571073/139746을 읽으셨습니까? –
친구 코드가 본인과 동일한 지 * 알고 있습니까? – mathematician1975
대신에 dx = 1/N을 사용하는 것이 좋습니다. 나는 당신이 dx에서 1/N의 값을 취할 때 정밀도 상 약간의 손실이 있다고 생각합니다. 그것은 전파되고 있습니다. –