如何使用c编码罪恶进展?

时间:2017-06-14 22:35:17

标签: c++ math sin

我在编码方面很陌生,并试图为uni编写一个罪恶进展

作为一个公式,它看起来像这样:

the picture of the progression

所以我试着编码......不知怎的,它计算的是弧度而不是正弦......出了什么问题?

#include "stdafx.h"
#include <iostream>
#include <math.h>

using namespace std;

double n, a;

int fakultaet(double a = 2 * n + 1)
{
  if (a == 0)
    return 1;
  else
    return (a * fakultaet(a - 1));
}

int _tmain(int argc, _TCHAR* argv[])
{
    double sin, y, f; // sin = Sinus, y= angle, n=index
    printf("please insert the angle \n");
    scanf("%lf", &y);

    double x = y * 3.14159265359 * 1 / 180; // x = radian measure

    while (n < 5)
    {
        sin = pow(-1, n) * pow(x, 2 * n + 1) / fakultaet(a);
    }

    printf("The sinus is %lf\n", sin);

    system("Pause");

    return 0;
}

2 个答案:

答案 0 :(得分:1)

你没有增加罪,或n。同样硬编码阶乘的入门值并不好。 看起来应该更像这样:

#include "stdafx.h"
#include <iostream>
#include <math.h>

using namespace std;

int fakultaet(double a)
{
  if (a == 0)
    return 1;
  else
    return (a * fakultaet(a - 1));
}

int main()
{

    double sin = 0, y, f; // sin = Sinus, y= angle, n=index
    printf("please insert the angle \n");
    scanf("%lf", &y);

    double x = y * 3.14159265359 * 1 / 180; // x = radian measure

    for (int n = 0; n < 5; ++n)
    {
        sin += pow(-1, n) * pow(x, 2 * n + 1) / fakultaet(2 * n + 1);
    }

    printf("The sinus is %lf\n", sin);

    system("Pause");

    return 0;
}

我做了几次编辑。我改变了阶乘函数:

int fakultaet(double a = 2 * n + 1)

进入非硬编码版本:

int fakultaet(double a)

添加了sin初始化:

double sin = 0

更改了你的while循环:

while (n < 5)

进入包含缺失增量的for:

for (int n = 0; n < 5; ++n)

也改变了罪的计算:

sin = pow(-1, n) * pow(x, 2 * n + 1) / fakultaet(a);

总结为:

sin += pow(-1, n) * pow(x, 2 * n + 1) / fakultaet(2 * n + 1);

答案 1 :(得分:0)

通过观察,您可以获得更整洁,更有效的结果 总和中的相邻项是相关的。我们可以将此表示为重复:

  • T_n = - T_{n-1} x^2 /((2n+1) (2n))
  • T_0 = x

这更好,因为它避免了对pow的调用以及需要进行任何明确的因子计算(fakultaet)。

代码类似于:

int main() {
  ...
  double T = x;
  double sin = T;
  for(int i=1 ; i<5; ++i) {
    T *= -(x*x) / ((2*i+1)*(2*i));
    sin += T;
  }
  ...
}