2015-12-02 46 views
-1

泰勒級數展開如何解決我的代碼?與給定的精度COS(X)的

EPS 遞歸方法

[錯誤]重載函數沒有上下文類型的信息

如何能我修復這個錯誤?

Photo1

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

double cos(double x, double eps, double s=0,double n=0,double a=0) { 
    if (abs(n)<1){ 
    cos=cos(x, eps,1,1,1); 
} 
else { 
    a = -a*x*x/((2*n-1) * (2*n)); 
    if (abs(a)<=eps) { 
     cos=s; 
    } 
    else{ 
     cos=cos(x, eps, s+a, a,n+1); 
    } 
    } 
} 
int main() { 
    double x; 
    scanf("%f", &x); 
    cos(x, 0.000000000000001); 
} 
+2

函數'cos'被聲明爲返回一個double值。但是,我沒有看到該函數中的任何'return'語句。 – abelenky

+2

另外C不支持默認參數 – Kevin

+2

梅,C不是pascal!使用'return s;'而不是'cos = s;'等等。 – HolyBlackCat

回答

3

你包括math.h,其中有一個名爲cos功能,即不同的工作原理有點。

您重載該名稱(例如:寫另一個功能還與名cos),但沒有給編譯器的任何手段來推斷你要調用其中的cos版本。

通過爲您的函數命名不同而獨特的東西來解決這個問題。


這是我在一個固定的嘗試:

double TaylorCOS(double x, double eps, double s=0,double n=0,double a=0) 
{ 
    if (abs(n)<1) 
    { 
     return TaylorCOS(x, eps,1,1,1); 
    } 

    a = -a*x*x/((2*n-1) * (2*n)); 
    if (abs(a)<=eps) 
    { 
     return s; 
    } 

    return TaylorCOS(x, eps, s+a, a,n+1); 
} 
+1

另外,OP應修復'return'語句。現在他試圖使用pascal語法'FunctionName = value;'而不是'return value;'。 – HolyBlackCat

+0

謝謝,abelenky – Dom

0

就像你在

cos=s; 
cos=cos(x, eps, s+a, a,n+1); 

無論是用C行,你不能分配給功能標識,也沒有在C++。這個程序被破壞無法修復。

相關問題