C++ 如何用c编写sin级数?
我对编码和尝试为大学写一个sin级数相当陌生 公式如下所示:C++ 如何用c编写sin级数?,c++,math,trigonometry,C++,Math,Trigonometry,我对编码和尝试为大学写一个sin级数相当陌生 公式如下所示: #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 si
#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;
}
所以我试着编码它。。。不知怎的,它计算的是弧度,而不是鼻窦。。。怎么了
#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;
}
#包括“stdafx.h”
#包括
#包括
使用名称空间std;
双n,a;
内部法库尔泰特(双a=2*n+1)
{
如果(a==0)
返回1;
其他的
报税表(a*fakultaet(a-1));
}
int _tmain(int argc,_TCHAR*argv[]
{
双正弦,y,f;//正弦=正弦,y=角度,n=指数
printf(“请插入角度”);
扫描频率(“%lf”、&y);
双x=y*3.14159265359*1/180;//x=弧度测量
而(n<5)
{
sin=pow(-1,n)*pow(x,2*n+1)/fakultaet(a);
}
printf(“窦是%lf\n”,sin);
系统(“暂停”);
返回0;
}
您没有增加sin或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)
添加了sin初始化:
double sin = 0
更改了您的while循环:
while (n < 5)
归纳为:
sin += pow(-1, n) * pow(x, 2 * n + 1) / fakultaet(2 * n + 1);
通过观察,您可以得到更整洁、更有效的结果 总和中的相邻项是相关的。我们可以将其表示为重复:
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;
}
...
}
intmain(){
...
双T=x;
双sin=T;
for(int i=1;i因为n永远不会达到5?那么我该如何更改它?我的意思是,我们从何处得知进程何时结束,所以我决定以某种方式完成它…我应该设置n=5吗?在循环中,你需要递增n
。也许你想要一个for循环。为什么n
是一个双精度循环?为什么在main()之外声明它 >代码> > tMeN/COD>不是托管环境中C程序的兼容条目。这是C++,而不是C(只是坏编码风格-为什么不使用IOSROW方法?)@ DRESCHJM确实,谢谢您注意到为什么设置了Sin 0?为什么设置了Sin 0?如果没有设置它,则代码< < S> < /代码>将不初始化。(可能包含内存中的随机垃圾值,这将使您的计算成为垃圾..)。
sin += pow(-1, n) * pow(x, 2 * n + 1) / fakultaet(2 * n + 1);
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;
}
...
}