请问S1E16这题怎么写?
请问S1E16这题怎么修改,我的问题在哪里?#include<stdio.h>#include<math.h>
#define molecule 1//分子
int main()
{
double denominator = 1;//分母
double number= 1;
double pi = 0.0;
double i = 0.0;
int n = 2;
while(fabs(number)>0.00000001)
{
number = molecule / denominator * pow(-1,n);
i += number;
denominator += 2;
n++;
}
pi = i * 4;
printf("pi的值:%.7f",pi);
return 0;
} 本帖最后由 jhq999 于 2022-10-31 11:26 编辑
你等一会儿,就出结果了
3.1415927/////里面的乱码我删了
Process returned 0 (0x0) execution time : 4.671 s
Press any key to continue.
jhq999 发表于 2022-10-31 11:24
你等一会儿,就出结果了
感谢您,我还是第一次遇到这种运行时间这么长的代码,请问您觉得我的算法还有进一步改进的空间吗? 本帖最后由 jhq999 于 2022-10-31 16:59 编辑
追光THO 发表于 2022-10-31 16:37
感谢您,我还是第一次遇到这种运行时间这么长的代码,请问您觉得我的算法还有进一步改进的空间吗?
你试试看,所以没事不要用pow函数,尤其是循环体里
doublesg = 1;///////
while(fabs(number)>0.00000001)
{
number = molecule / denominator * sg;///////
i += number;
denominator += 2;
sg=-sg;/////
} jhq999 发表于 2022-10-31 16:56
你试试看,所以没事不要用pow函数,尤其是循环体里
您好,按照您的方法确实快多了,(-1)^n在数学里面常用这个来控制正负性,但是在编程中确实没有sg = -sg好用。 追光THO 发表于 2022-10-31 17:18
您好,按照您的方法确实快多了,(-1)^n在数学里面常用这个来控制正负性,但是在编程中确实没有sg = -sg ...
-1偶数方是1,奇数方是-1
所以除了sg=-sg;
还可以if(n%2)sg=-1;else sg=1
页:
[1]