Hi i have used this code , but it outputs me 0.00159265 instead of 0. where is the problem ?
I have used taylor’s expansion to calculate sin :
#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;
}
Now :
I have moved my point and divergence radius between x and 3.1415 and now corrected :
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;
}
But it is give me reverse example : pi/2 = -1 and 3*pi/2 = 1.
Regarding the updated code, your radius adjustment is incorrect. You need to shift by multiples of 2π radians. You have shifted by π radians. To be more generally applicable your code should shift by multiples of 2π radians until it is in the range -π to π. This can be done with a single addition.
You also really should use an accurate value for π.