2013-05-05 55 views
0

該功能是y=x^2+2x+1,域是從0到10.如果輸入間隔數,則程序將打印結果。完成該功能,MeasurationByDivision()按部門進行測量

我做了下面的C代碼,但我心中已經得到了真正錯誤的結果.. 我想我失去了一些東西錯了..

它應該是這樣的結果:

10 
505.000000 
35 
460.612245 

我的代碼:

#include <stdio.h> 
#include <math.h> 

void MeasurationByDivision(double* result, int intervals); 
float f(float t) { return(pow(t,3) + 2); } 

int main(void) { 
    int intervals ; 
    double result=0; 
    scanf("%d", &intervals) ; 
    MeasurationByDivision(&result, intervals) ; 
    printf("%lf\n", result) ; 

    fflush(stdin); 
    getchar(); 
} 

void MeasurationByDivision(double* result, int intervals) 
{ 


    int i,a=0; 
    double x = 10/(double)intervals; 
    float y[100]; 

for(i=1; i<=intervals; i++) { 

    y[i]=a+i*x; 
    *result += x*f(y[i]); 

} 
} 

此代碼的結果是:

10 
3045.000000 

回答

2

功能是y=x^2+2x+1

那麼,爲什麼是你的功能呢?

float f(float t) { return(pow(t,3) + 2); } 

更改它以匹配給定的函數,並且您應該得到預期的結果。

我也擺脫了100個元素的數組:你根本不需要數組,如果你嘗試超過100個時間間隔,事情會變得非常糟糕。

+0

感謝ü...我應該擺脫100陣列quickly..xD ..我只是編輯的代碼浮動F(浮動T){回報率((T + 1 )*(t + 1));但我得不到預期的結果:不是35 460.612245而是35 460.612239 ...應該是460.612245 ..爲什麼我得到這個結果? – anna 2013-05-05 17:31:58

+0

這是因爲'float'不能準確表示所有數字。你得到可以表示的最接近的價值。 – 2013-05-05 17:34:41

+0

其正確..謝謝你! :) – anna 2013-05-05 17:40:29

2
float f(float t) { return(pow(t,3) + 2); } 

float f(float t) { return((t + 1)*(t + 1)); } 

加入它應該是460.612245 ..爲什麼我得到這樣的結果?

使用

double f(double t) { return((t + 1)*(t + 1)); } 
... 
double y[100]; 
+0

aww謝謝你!我編輯代碼以浮動f(float t){return((t + 1)*(t + 1));但我得不到預期的結果:不是35 460.612245但是35 460.612239 ...應該是460.612245 ..爲什麼我得到這個結果? – anna 2013-05-05 17:26:35

+0

@anna我認爲這可能是因爲float的精度不夠。 – BLUEPIXY 2013-05-05 17:34:27

+0

是的,我改變了浮動倍數,我有預期的結果。謝謝你! :) – anna 2013-05-05 17:41:26