C++泰勒系列

S.A*_*hid -6 c++

嗨,我已经使用了这个代码,但它输出0.00159265而不是0.问题出在哪里?

我用泰勒的扩张来计算罪恶:

#include <iostream>
#include <conio.h>
using namespace std;
double sin(double x)
{
       double value = x ;
       value -=(x*x*x)/6.0 ;
       value +=(x*x*x*x*x)/120.0; 
       value -=(x*x*x*x*x*x*x)/5040.0 ;
       value +=(x*x*x*x*x*x*x*x*x)/362880.0;
       value -=(x*x*x*x*x*x*x*x*x*x*x)/39916800.0;
       value +=(x*x*x*x*x*x*x*x*x*x*x*x*x)/6227020800.0;
       value -=(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)/1307674368000.0;
       value +=(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)/355687428096000.0;
       value -=(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)/121645100408832000.0;
       value +=(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)/51090942171709440000.0;
       value -=(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)/25852016738884976640000.0;
       value +=(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)/15511210043330985984000000.0;
       value -=(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)/10888869450418352160768000000.0;
       value +=(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)/8841761993739701954543616000000.0;
       return value;
}
int main()
{
 cout<<sin(3.14);
 getche();
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在:

我已将我的点和发散半径移动到x和3.1415之间,现在已经更正:

double sin(double x)
{
       x=x-3.1415;
       double value = x ;
       value -=(x*x*x)/6.0 ;
       value +=(x*x*x*x*x)/120.0; 
       value -=(x*x*x*x*x*x*x)/5040.0 ;
       value +=(x*x*x*x*x*x*x*x*x)/362880.0;
       value -=(x*x*x*x*x*x*x*x*x*x*x)/39916800.0;
       value +=(x*x*x*x*x*x*x*x*x*x*x*x*x)/6227020800.0;
       value -=(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)/1307674368000.0;
       value +=(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)/355687428096000.0;
       value -=(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)/121645100408832000.0;
       value +=(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)/51090942171709440000.0;
       value -=(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)/25852016738884976640000.0;
       value +=(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)/15511210043330985984000000.0;
       value -=(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)/10888869450418352160768000000.0;
       value +=(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)/8841761993739701954543616000000.0;
       return value;
}
Run Code Online (Sandbox Code Playgroud)

但它反过来给出了一个例子:pi/2 = -1和3*pi/2 = 1.

spr*_*aff 6

为什么它应该是零?sin(pi)是零,但这不是你正在计算的 - 你正在计算一个近似值sin(3.14).


Ale*_* C. 6

因为sin(3.14) = 0.0015926529164868282,而不是零.

请注意,pi - 3.14 ~ 0.0015926536...sin(pi - x) ~ x,这与你的结果是一致的.

皮不是3.14.