即時製作一個程序,該程序可以找出函數n的不同值的函數的積分,以及常數a。我的程序似乎工作正常,但即時通訊在我的結果中得到一個小的舍入錯誤,我不知道爲什麼。我知道我有一個錯誤,因爲我的一個朋友也在製作相同的程序,他的結果與我的結果稍有不同,而且他在計算器上進行整合時確實是正確的,這讓他的價值更接近他。以下是我的結果和他的a = 2和n = 1。c積分程序中的舍入誤差
他的結果:0.189070
我的結果:0.189053
香港專業教育學院試圖經歷,只是鑄造的一切我能想到的,但仍然無法工作在哪裏即時得到我的錯誤的,任何幫助,指出其中IM作爲一個白癡將不勝感激! :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
,而不是在計算1/N直線中使用dx = 1/N。我認爲當你在dx中取1/N的值時,會有一些精確度損失。它正在傳播。 –