鱼C论坛

 找回密码
 立即注册
查看: 3313|回复: 16

[已解决]请问这两个程序有什么不一样呢(S1E16)?

[复制链接]
发表于 2021-10-20 21:20:39 | 显示全部楼层 |阅读模式
6鱼币
  1. #include <stdio.h>
  2. #include <math.h>

  3. int main(void)
  4. {
  5.         int i;
  6.         int j = 1;
  7.         double result = 1;
  8.         long double answer = 0;
  9.        
  10.         for (j = 1;result >= 1e-8; j++)
  11.         {
  12.                 result = 1.0/(2 * (double)j - 1);
  13.                 //printf("%.8f\n",result);
  14.                 if (j % 2)
  15.                         i = 1;
  16.                 else
  17.                         i = -1;
  18.                 answer += i * result;
  19.         }
  20.        
  21.         printf("PI的近似值是%9.7f",answer * 4);
  22.        
  23.     return 0;
  24. }
复制代码


  1. #include <stdio.h>


  2. int main()
  3. {
  4.         int i;
  5.         double result = 0;
  6.         double last =1;
  7.         int n;
  8.       
  9.         for(n = 1;last >= 1e-8; n++ )
  10.         {
  11.                 if(n % 2)
  12.                 {
  13.                         i = 1;
  14.                 }
  15.                 else
  16.                 {
  17.                         i = -1;
  18.                 }
  19.             result = result + i * (1 / (2 * (double)n - 1));
  20.             last = (1 / (2 * (double)n - 1));
  21. }
  22.         printf("%9.7f",result * 4);
  23.             return 0;
  24. }
复制代码


怎么结果完全不一样?
最佳答案
2021-10-20 21:20:40
  1. #include <stdio.h>
  2. #include <math.h>

  3. int main(void)
  4. {
  5.         int i;
  6.         int j = 1;
  7.         double result = 1;
  8.         long double answer = 0;
  9.         
  10.         for (j = 1;result >= 1e-8; j++)
  11.         {
  12.                 result = 1.0/(2 * (double)j - 1);
  13.                 //printf("%.8f\n",result);
  14.                 if (j % 2)
  15.                         i = 1;
  16.                 else
  17.                         i = -1;
  18.                 answer += i * result;
  19.         }
  20.         
  21.         //printf("PI的近似值是%9.7f",answer * 4);
  22.         printf("PI的近似值是%9.7Lf\n",answer * 4);
  23.         
  24.     return 0;
  25. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-10-20 21:20:40 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdio.h>
  2. #include <math.h>

  3. int main(void)
  4. {
  5.         int i;
  6.         int j = 1;
  7.         double result = 1;
  8.         long double answer = 0;
  9.         
  10.         for (j = 1;result >= 1e-8; j++)
  11.         {
  12.                 result = 1.0/(2 * (double)j - 1);
  13.                 //printf("%.8f\n",result);
  14.                 if (j % 2)
  15.                         i = 1;
  16.                 else
  17.                         i = -1;
  18.                 answer += i * result;
  19.         }
  20.         
  21.         //printf("PI的近似值是%9.7f",answer * 4);
  22.         printf("PI的近似值是%9.7Lf\n",answer * 4);
  23.         
  24.     return 0;
  25. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-10-21 09:07:56 | 显示全部楼层
定义的精度不同一个是 long double 一个是double

评分

参与人数 1鱼币 +5 收起 理由
飞花落尽 + 5 鱼C有你更精彩^_^

查看全部评分

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

使用道具 举报

 楼主| 发表于 2021-10-21 12:48:59 | 显示全部楼层
村里小黑 发表于 2021-10-21 09:07
定义的精度不同一个是 long double 一个是double

所以为什么精度差别这么大呢(一个是0.000,另一个是3.14)?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-21 12:56:39 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-21 13:00:38 | 显示全部楼层

诶,这个好像也不行
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-21 13:01:16 | 显示全部楼层

只有两个为double才行
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-10-21 13:24:23 | 显示全部楼层
飞花落尽 发表于 2021-10-21 13:01
只有两个为double才行

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

使用道具 举报

 楼主| 发表于 2021-10-21 14:50:05 | 显示全部楼层

你那个程序运行出来还是0
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-10-21 14:52:51 | 显示全部楼层
飞花落尽 发表于 2021-10-21 14:50
你那个程序运行出来还是0

看看这个输出什么

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>

  4. int main(void)
  5. {
  6.     printf("%lu\n", sizeof(double));
  7.     printf("%lu\n", sizeof(long double));
  8.     exit(0);
  9.         int i;
  10.         int j = 1;
  11.         double result = 1;
  12.         long double answer = 0;
  13.         
  14.         for (j = 1;result >= 1e-8; j++)
  15.         {
  16.                 result = 1.0/(2 * (double)j - 1);
  17.                 //printf("%.8f\n",result);
  18.                 if (j % 2)
  19.                         i = 1;
  20.                 else
  21.                         i = -1;
  22.                 answer += i * result;
  23.         }
  24.         
  25.         //printf("PI的近似值是%9.7f",answer * 4);
  26.         printf("PI的近似值是%9.7Lf\n",answer * 4);
  27.         
  28.     return 0;
  29. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-21 15:09:52 | 显示全部楼层
人造人 发表于 2021-10-21 14:52
看看这个输出什么

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

使用道具 举报

发表于 2021-10-21 15:18:03 | 显示全部楼层
然后,这个程序输出 0 是吗?
贴个图片看看

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>

  4. int main(void)
  5. {
  6.         int i;
  7.         int j = 1;
  8.         double result = 1;
  9.         long double answer = 0;
  10.         
  11.         for (j = 1;result >= 1e-8; j++)
  12.         {
  13.                 result = 1.0/(2 * (double)j - 1);
  14.                 //printf("%.8f\n",result);
  15.                 if (j % 2)
  16.                         i = 1;
  17.                 else
  18.                         i = -1;
  19.                 answer += i * result;
  20.         }
  21.         
  22.         //printf("PI的近似值是%9.7f",answer * 4);
  23.         printf("PI的近似值是%9.7Lf\n",answer * 4);
  24.         
  25.     return 0;
  26. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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
请按任意键继续. .

结果真的是这个
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-21 20:31:28 | 显示全部楼层
人造人 发表于 2021-10-21 15:18
然后,这个程序输出 0 是吗?
贴个图片看看

代码我复制粘贴的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-10-21 20:36:43 | 显示全部楼层

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

使用道具 举报

 楼主| 发表于 2021-10-21 20:57:40 | 显示全部楼层
人造人 发表于 2021-10-21 20:36
我看看
qq: 1440332527

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

使用道具 举报

 楼主| 发表于 2021-10-21 21:22:03 | 显示全部楼层
人造人 发表于 2021-10-21 20:36
我看看
qq: 1440332527

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-26 00:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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