首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用while循环计算c中的pi

如何使用while循环计算c中的pi
EN

Stack Overflow用户
提问于 2021-11-09 07:04:48
回答 2查看 100关注 0票数 0

我正在尝试用c写一段代码,使用while循环来近似pi的值。我知道使用for循环这样做要容易得多,但我正在尝试使用while来做到这一点。我使用的公式在下面的链接中:https://www.paulbui.net/wl/Taylor_Series_Pi_and_e,我写的代码如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
#include <stdio.h>
#include <math.h>
int main(){
   long n=10;
   while(n>0){
      double a=0;
      a+=((pow(-1,n))/((2*n)+1));
      n=n-1;
      printf("%ld",4*a);
   }
return 0;
}

我使用long和double类型的原因是我想要做一个很好的精确度的近似,但首先我应该为这个问题做st。提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-09 07:13:10

您必须将a初始化移到循环之前,并设置停止条件-例如,计算当前和数。此外,不使用pow增量计算符号也是值得的

代码语言:javascript
代码运行次数:0
运行
复制
double a=0;
double eps= 1.0e-6; //note this series has rather slow convergence
n = 0;
double tx = 1.0;
double t = 1.0;
while(abs(tx)>eps){
   tx = t / (2*n+1)); 
   a+= tx;
   printf("%f",4*a);
   n++;
   t = - t; 
} 
票数 1
EN

Stack Overflow用户

发布于 2021-11-09 16:15:40

发布的代码不能干净地编译!

代码语言:javascript
代码运行次数:0
运行
复制
gcc -ggdb3 -Wall -Wextra -Wconversion -pedantic -std=gnu11 -c "untitled.c" -o "untitled.o" 

untitled.c: In function ‘main’:
untitled.c:7:19: warning: conversion from ‘long int’ to ‘double’ may change value [-Wconversion]
7 |       a+=((pow(-1,n))/((2*n)+1));
  |                   ^

untitled.c:7:22: warning: conversion from ‘long int’ to ‘double’ may change value [-Wconversion]
7 |       a+=((pow(-1,n))/((2*n)+1));
  |                      ^

untitled.c:9:17: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 2 has type ‘double’ [-Wformat=]
9 |       printf("%ld",4*a);
  |               ~~^  ~~~
  |                 |   |
  |                 |   double
  |                 long int
  |               %f

编译已成功完成。

注意:当出现警告时,修复这些警告。此外,当出现警告时,编译器会输出它的最佳猜测,这不一定是您想要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69894035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档