2015-12-02 38 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++。这个程序被破坏无法修复。

相关问题