鱼C论坛

 找回密码
 立即注册
查看: 1931|回复: 3

精确度问题

[复制链接]
发表于 2022-5-20 08:36:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目是根据公式求Π,要求精确度为0.0005,即某项小于0.0005时停止
为什么我的运行出来结果跟答案给的结果不一样,哪里错了?
fun函数里面为自己写的
答案写的是
  1. double s=0.0,s1=1.0;
  2. int n=1;
  3. while(s1>=eps)
  4. {
  5. s=s+s1;
  6. s1=s1*n/(2*n+1);
  7. n++;
  8. }
  9. return 2*s;
复制代码


fun函数里面是我自己写的,麻烦帮我看下
  1. #include <stdio.h>
  2. #include <math.h>
  3. double  fun ( double  eps)
  4. {
  5.         double pi,a=1.0,b=1.0,i=1.0,t;
  6.         pi=1.0;
  7.         t=1.0;
  8.         while(t>=eps)
  9.         {
  10.                 a*=i;
  11.                 b*=(2*i+1);
  12.                 t=a/b;
  13.                 pi+=t;
  14.                 i++;
  15.         }
  16.         return (2*pi);


  17. }

  18. void main( )
  19. { double  x;void NONO ();
  20.   printf("Input eps:") ;
  21.   scanf("%lf",&x); printf("\neps = %lf, PI=%lf\n", x, fun(x));
  22.   NONO();
  23. }

  24. void NONO ()
  25. {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
  26.   FILE *fp, *wf ;
  27.   int i ;
  28.   double x ;

  29.   fp = fopen("in.dat","r") ;
  30.   wf = fopen("out.dat","w") ;
  31.   for(i = 0 ; i < 10 ; i++) {
  32.     fscanf(fp, "%lf", &x) ;
  33.     fprintf(wf, "%lf\n", fun(x)) ;
  34.   }
  35.   fclose(fp) ;
  36.   fclose(wf) ;
  37. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-5-20 08:45:10 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-20 10:42:44 | 显示全部楼层
人造人 发表于 2022-5-20 08:45
?
https://fishc.com.cn/forum.php?mod=redirect&goto=findpost&ptid=213582&pid=5842010

那个没有解决我的问题,我想看看我的方法哪里错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-20 12:36:14 | 显示全部楼层
h-b-z-d-j-s-m 发表于 2022-5-20 10:42
那个没有解决我的问题,我想看看我的方法哪里错了

???
https://fishc.com.cn/forum.php?m ... 582&pid=5842010

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

double fun(double eps) {
    double pi, a = 1.0, b = 1.0, i = 1.0, t;
    pi = 1.0;
    t = 1.0;
    //while(t >= eps) {
    while(1) {
        a *= i;
        b *= (2 * i + 1);
        t = a / b;
        if(t < eps) break;
        pi += t;
        i++;
    }
    return (2 * pi);
}

// void main( )
int main(void) {
    double x;
    void NONO();
    //printf("Input eps:");
    //scanf("%lf", &x);
    x = 0.0005;
    printf("\neps = %lf, PI=%lf\n", x, fun(x));
    //NONO();
}

void NONO() { /* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
    FILE *fp, *wf;
    int i;
    double x;

    fp = fopen("in.dat", "r");
    wf = fopen("out.dat", "w");
    for(i = 0; i < 10; i++) {
        fscanf(fp, "%lf", &x);
        fprintf(wf, "%lf\n", fun(x));
    }
    fclose(fp);
    fclose(wf);
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 09:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表