deno=deno*(2*(i-1))*(2*i-1);
这里可能导致double越界。
你可以在每次递进时,根据上次的值乘以x*x再除以(2*(i-1))*(2*i-1)。
因为
xn/n! = x(n-2)/(n-2) * (x*x / (n * (n-1))
但是由于用了除法,所以得到的结果是近似值。
另外main函数必须有返回值,不能用void
#include "stdafx.h"
#include
#include
#include
using namespace std;
int main(int argc, char* argv[])
{
double start,stop;
int i;
static long n=10000000;
double mole=1.0;
double deno=1.0;
double x=1.0;
double time;
double sum=0.0;
double result;
cout<
cin>>x;
x*=(3.1415926/180);
start=clock();
double pre = 0.0f;
#pragma omp parallel for firstprivate(mole,deno) reduction(+:sum)
double sqX = x*x;
bool totInit = true;
for(i=2;i<=n;i++)
{
if(totInit)
{
pre = sqX/6;
totInit = false;
}
else{
pre *= sqX/((2*(i-1))*(2*i-1));
}
sum=sum+(-1)*pre;
}
result=(sum+1.0)*x;
stop=clock();
time=(stop-start)/1000;
cout<
return 0;
}
麻烦把正确答案设为解答。