在c编程中创建一个Sin公式

时间:2014-03-20 03:25:47

标签: c function sin

该程序将编译,但在运行时我没有从我的输入中得到正确的值,我已经找到了制作正弦公式的方法,并找到了这个,但我不相信它是正确的。< / p>

我的配方是否正确? 我认为在c中运行sin函数也会给我错误的值。

* 如果我输入1.5和4 im得到0.000和随机整数

,这些更改仍会得到错误的值
 /*
  * Function mySin is using a sin formula to get the sin of x
  * the function then returns the sin value computed 
  * Parameters -for function mySin are "x" is the value for sin
  *            -"n"is the number of series to run
  *
  *The program also uses the sin(x) function to get the real sin
  * 
  */ 

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

 int mySin(double x, int n){

    int i=0;
    double sinx=0;

    for(i=1; i<=n; i+=2){
        sinx=(pow(x,i)+sinx); // 
    }

    return sinx;
    }


    int main(double sinx){

    double realSin=0;

    double x=0;
    int n=0;

    printf("Please input x and n:");
    scanf("%lf",&x);
    scanf("%d",&n);

    mySin(x,n);

    realSin=sin(x);

    printf("mySin= %f\n sin=%d\n",sinx,realSin); 
 }

4 个答案:

答案 0 :(得分:5)

您的mySin功能至少有5种不同的方式。使用**表示取幂(以避免与xor混淆),正确的公式是

sin(x) = x - x**3/3! + x**5/5! - x**7/7! + x**9/9! ...

您的实施失败,因为

  1. 它会在循环的每次迭代中丢弃先前的术语。
  2. 它没有替代标志。
  3. 它包含偶数指数词。
  4. 它没有计算除数中的阶乘。
  5. 返回类型为int,丢弃计算结果的小数部分。
  6. 此外,main在更多方面有误。 mySin的返回值完全被忽略。相反,sinxmain的第一个参数,它是程序收到的命令行参数的数量(包括它运行的名称)。此外,%d用于格式字符串中的所有数字,无论其类型如何,仅适用于int

    要修复mySin,请让i仅查看奇数值,并让循环的每次迭代计算x**i/i!并将其添加到当前值sinx中。

    要修复main,请在sinx中声明一个本地main变量并指定sinx = mySin(x, n),而不是声明sinx作为参数。另外,使用%lf来阅读scanf%f的双打,以便用printf写双打。

答案 1 :(得分:1)

mySin应该返回double。您将返回int

sin值可以使用傅立叶级数计算。

答案 2 :(得分:1)

x是双倍因此你必须在scanf中使用,在printf中使用

    double x;
    scanf("%lf", &x);
    printf ("%f", x);

答案 3 :(得分:1)

代码中的另一个错误点是您通过**

计算能力

C中没有幂运算符。编译器将x**i视为x * (*i)。但由于i不是指针,它会返回您看到的错误。您必须使用pow()代替