飞花落尽 发表于 2021-10-20 21:20:39

请问这两个程序有什么不一样呢(S1E16)?

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

int main(void)
{
        int i;
        int j = 1;
        double result = 1;
        long double answer = 0;
       
        for (j = 1;result >= 1e-8; j++)
        {
                result = 1.0/(2 * (double)j - 1);
                //printf("%.8f\n",result);
                if (j % 2)
                        i = 1;
                else
                        i = -1;
                answer += i * result;
        }
       
        printf("PI的近似值是%9.7f",answer * 4);
       
    return 0;
}


#include <stdio.h>


int main()
{
      int i;
      double result = 0;
      double last =1;
      int n;
      
      for(n = 1;last >= 1e-8; n++ )
      {
                if(n % 2)
                {
                        i = 1;
                }
                else
                {
                        i = -1;
                }
            result = result + i * (1 / (2 * (double)n - 1));
            last = (1 / (2 * (double)n - 1));
}
      printf("%9.7f",result * 4);
            return 0;
}


怎么结果完全不一样?

人造人 发表于 2021-10-20 21:20:40

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

int main(void)
{
      int i;
      int j = 1;
      double result = 1;
      long double answer = 0;
      
      for (j = 1;result >= 1e-8; j++)
      {
                result = 1.0/(2 * (double)j - 1);
                //printf("%.8f\n",result);
                if (j % 2)
                        i = 1;
                else
                        i = -1;
                answer += i * result;
      }
      
      //printf("PI的近似值是%9.7f",answer * 4);
      printf("PI的近似值是%9.7Lf\n",answer * 4);
      
    return 0;
}

村里小黑 发表于 2021-10-21 09:07:56

定义的精度不同一个是 long double 一个是double

飞花落尽 发表于 2021-10-21 12:48:59

村里小黑 发表于 2021-10-21 09:07
定义的精度不同一个是 long double 一个是double

所以为什么精度差别这么大呢(一个是0.000,另一个是3.14)?

飞花落尽 发表于 2021-10-21 12:56:39

人造人 发表于 2021-10-21 12:52


哦,傻了{:9_229:}

飞花落尽 发表于 2021-10-21 13:00:38

人造人 发表于 2021-10-20 21:20


诶,这个好像也不行

飞花落尽 发表于 2021-10-21 13:01:16

人造人 发表于 2021-10-20 21:20


只有两个为double才行

人造人 发表于 2021-10-21 13:24:23

飞花落尽 发表于 2021-10-21 13:01
只有两个为double才行

?

飞花落尽 发表于 2021-10-21 14:50:05

人造人 发表于 2021-10-21 13:24
?

你那个程序运行出来还是0

人造人 发表于 2021-10-21 14:52:51

飞花落尽 发表于 2021-10-21 14:50
你那个程序运行出来还是0

看看这个输出什么

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

int main(void)
{
    printf("%lu\n", sizeof(double));
    printf("%lu\n", sizeof(long double));
    exit(0);
      int i;
      int j = 1;
      double result = 1;
      long double answer = 0;
      
      for (j = 1;result >= 1e-8; j++)
      {
                result = 1.0/(2 * (double)j - 1);
                //printf("%.8f\n",result);
                if (j % 2)
                        i = 1;
                else
                        i = -1;
                answer += i * result;
      }
      
      //printf("PI的近似值是%9.7f",answer * 4);
      printf("PI的近似值是%9.7Lf\n",answer * 4);
      
    return 0;
}

飞花落尽 发表于 2021-10-21 15:09:52

人造人 发表于 2021-10-21 14:52
看看这个输出什么

8
16

人造人 发表于 2021-10-21 15:18:03

然后,这个程序输出 0 是吗?
贴个图片看看

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

int main(void)
{
      int i;
      int j = 1;
      double result = 1;
      long double answer = 0;
      
      for (j = 1;result >= 1e-8; j++)
      {
                result = 1.0/(2 * (double)j - 1);
                //printf("%.8f\n",result);
                if (j % 2)
                        i = 1;
                else
                        i = -1;
                answer += i * result;
      }
      
      //printf("PI的近似值是%9.7f",answer * 4);
      printf("PI的近似值是%9.7Lf\n",answer * 4);
      
    return 0;
}

飞花落尽 发表于 2021-10-21 20:30:22

人造人 发表于 2021-10-21 15:18
然后,这个程序输出 0 是吗?
贴个图片看看

PI的近似值是0.0000000

--------------------------------
Process exited after 0.6471 seconds with return value 0
请按任意键继续. .

结果真的是这个

飞花落尽 发表于 2021-10-21 20:31:28

人造人 发表于 2021-10-21 15:18
然后,这个程序输出 0 是吗?
贴个图片看看

代码我复制粘贴的

人造人 发表于 2021-10-21 20:36:43

飞花落尽 发表于 2021-10-21 20:31
代码我复制粘贴的

我看看
qq: 1440332527

飞花落尽 发表于 2021-10-21 20:57:40

人造人 发表于 2021-10-21 20:36
我看看
qq: 1440332527

加了

飞花落尽 发表于 2021-10-21 21:22:03

人造人 发表于 2021-10-21 20:36
我看看
qq: 1440332527

在吗?
页: [1]
查看完整版本: 请问这两个程序有什么不一样呢(S1E16)?