鱼C论坛

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

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

[复制链接]
发表于 2021-10-20 21:20:39 | 显示全部楼层 |阅读模式
6鱼币
#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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

所以为什么精度差别这么大呢(一个是0.000,另一个是3.14)?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-21 12:56:39 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

诶,这个好像也不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

只有两个为double才行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

你那个程序运行出来还是0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

8
16
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> 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
请按任意键继续. .

结果真的是这个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

代码我复制粘贴的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

我看看
qq: 1440332527
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

加了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

在吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 17:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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