追光THO 发表于 2022-10-31 11:07:12

请问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:24:35

本帖最后由 jhq999 于 2022-10-31 11:26 编辑

你等一会儿,就出结果了
3.1415927/////里面的乱码我删了
Process returned 0 (0x0)   execution time : 4.671 s
Press any key to continue.

追光THO 发表于 2022-10-31 16:37:48

jhq999 发表于 2022-10-31 11:24
你等一会儿,就出结果了

感谢您,我还是第一次遇到这种运行时间这么长的代码,请问您觉得我的算法还有进一步改进的空间吗?

jhq999 发表于 2022-10-31 16:56:23

本帖最后由 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;/////
      }

追光THO 发表于 2022-10-31 17:18:22

jhq999 发表于 2022-10-31 16:56
你试试看,所以没事不要用pow函数,尤其是循环体里

您好,按照您的方法确实快多了,(-1)^n在数学里面常用这个来控制正负性,但是在编程中确实没有sg = -sg好用。

jhq999 发表于 2022-10-31 17:42:28

追光THO 发表于 2022-10-31 17:18
您好,按照您的方法确实快多了,(-1)^n在数学里面常用这个来控制正负性,但是在编程中确实没有sg = -sg ...

-1偶数方是1,奇数方是-1
所以除了sg=-sg;
还可以if(n%2)sg=-1;else sg=1
页: [1]
查看完整版本: 请问S1E16这题怎么写?