C++太极门小弟子 发表于 2021-10-11 23:04:39

S1E16求pi近似值

#include<stdio.h>
#include<math.h>
int main(){
    double result=0,num=1;
    float i;
    for(i=1;i>=1;i++){
      num=1/(2*i-1);
      if(fabs(num)>= 1e-8){
            result=result+num*pow(-1,i+1);
      }
      else if (fabs(num)<1e-8){
            break;
      }
    }
    printf("%.7f",result*4);
    getchar();
    return 0;
}
为啥会没有输出呢

wp231957 发表于 2021-10-12 06:47:20

公式是啥

负数零 发表于 2021-10-12 09:23:33

有可能是计算过程太繁琐了,程序崩溃了没有结果,我之前做第一阶段考核题几个题代码对的程序都崩了{:10_269:}{:10_269:}试试把它简化一下吧{:10_257:}

负数零 发表于 2021-10-12 09:36:28

本帖最后由 负数零 于 2021-10-12 21:58 编辑

把float i换成double i,后面i也参与了除法,用float精度不够,换成double i就可以运行了

傻眼貓咪 发表于 2021-10-12 09:40:43

本帖最后由 傻眼貓咪 于 2021-10-12 10:13 编辑

#include <stdio.h>
#include <math.h>

int main(){
    int s = 1;
    double pi = 0, n = 1, t = 1; // 精度换成 double
   
    while(fabs(t)>1e-8){
      pi += t;
      n += 2;
      s = -s;
      t = s/n;
    }
    pi *= 4;
    printf("pi = %10.8f", pi);
    return 0;
}pi = 3.14159263

负数零 发表于 2021-10-12 09:52:31

本帖最后由 负数零 于 2021-10-12 19:14 编辑

.

C++太极门小弟子 发表于 2021-10-12 22:55:27

wp231957 发表于 2021-10-12 06:47
公式是啥

公式是
pi/4=1-1/3+1/5-1/7+1/9.....
要求最后一个数要小于10^-8但该数不参与运算

C++太极门小弟子 发表于 2021-10-12 23:23:27

负数零 发表于 2021-10-12 09:36
把float i换成double i,后面i也参与了除法,用float精度不够,换成double i就可以运行了

{:10_257:}有输出了,就是太久了估计会超时

C++太极门小弟子 发表于 2021-10-12 23:24:09

傻眼貓咪 发表于 2021-10-12 09:40


for循环比while循环用时要久,这是为什么呢{:10_272:}

wp231957 发表于 2021-10-13 06:35:34

C++太极门小弟子 发表于 2021-10-12 23:24
for循环比while循环用时要久,这是为什么呢

这东西就不能用for循环

负数零 发表于 2021-10-13 07:15:37

C++太极门小弟子 发表于 2021-10-12 23:23
有输出了,就是太久了估计会超时

你都用pow函数了,它算的能不慢吗,循环一次算一次

傻眼貓咪 发表于 2021-10-13 11:32:19

C++太极门小弟子 发表于 2021-10-12 23:24
for循环比while循环用时要久,这是为什么呢

执行时间长短应该和 for 和 while 没有关系

C++太极门小弟子 发表于 2021-10-13 23:20:32

负数零 发表于 2021-10-13 07:15
你都用pow函数了,它算的能不慢吗,循环一次算一次

{:10_262:}好吧
页: [1]
查看完整版本: S1E16求pi近似值