鱼C论坛

 找回密码
 立即注册
查看: 2717|回复: 2

求助求Π的问题

[复制链接]
发表于 2022-10-3 16:52:46 | 显示全部楼层 |阅读模式

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

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

x
我的代码如下:

#include<stdio.h>
#include<math.h>
int main()
{
        int acc,times;
        int sign=1;
        double pi,i,temp;
        printf("请输入想要计算到pi的小数点后的位数:");
        scanf("%d",&acc);
        pi=0.0;
        i=1.0;
        while(fabs(temp)>=pow(10,-acc))
        {
                pi+=temp;
                i+=2;
                temp=sign/i;
                sign=-sign;
        }
        pi = pi*4;
        printf("%lf\n",pi);
        return 0;
}


不知道为啥输入之后打印出的pi值是0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-3 17:21:52 | 显示全部楼层
c++的算六位小数
#include<bits/stdc++.h>
using namespace std;
double arctanx(double x)
{
        double sum=0;
        for(double i=1;i<99;i+=2)
        {
                if(pow(x,int(i))/i<=0.000001)break;//改这
                if(int(i)%4==1)
                {
                        sum+=1.0*pow(x,int(i))/i;
                }
                if(int(i)%4==3)
                {
                        sum-=1.0*pow(x,int(i))/i;
                }
        }
        return sum;
}
int main()
{
        double a=6.0*arctanx(1.0/sqrt(3));
        printf("%.10lf",a);
        return 0;
}
下载.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-12 00:19:02 | 显示全部楼层
本帖最后由 jackz007 于 2022-10-12 10:30 编辑

        这一句
        while(fabs(temp)>=pow(10,-acc))
        在进入循环前,temp 没有被赋值。
        下面是我修修改的代码:
#include<stdio.h>
#include<math.h>

int main(void)
{
        int acc,times                     ;
        int sign                          ;
        double d , pi , i , temp          ;
        printf("请输入想要计算到pi的小数点后的位数:");
        scanf("%d", & acc)                ;
        d = pow(10 , -acc)                ;
        pi = 0.0                          ;
        i = 1.0                           ;
        sign = 1                          ;
        temp = 1.0 / i                    ; // 进入循环前,需要先计算出循环变量 temp 的初值
        while(temp >= d) {
                pi += 1.0 * sign * temp   ;
                i += 2.0                  ;
                temp = 1.0 / i            ;
                sign = -sign              ;
        }                                 ;
        pi = pi * 4                       ;
        printf("%lf\n",pi)                ;
        return 0                          ;
}
        下面是我写的代码
#include <stdio.h>
#include <string.h>

int main(void)
{
        unsigned long long i , k , n                                               ;
        double b , s , PI                                                          ;
        char x[256]                                                                ;
        printf("请输入想要计算到 pi 的小数点后的位数:")                           ;
        scanf("%I64d" , & n)                                                       ;
        if(n < 3 || n > 7) n = 7                                                   ;
        for(k = 10 , i = 0 ; i < n ; i ++) k *= 10                                 ;
        for(PI = 1.0 , b = 3.0 , s = -1.0 ; b < k ; b += 2.0 , s = -s) PI += s / b ;
        sprintf(x , "PI = %%.%dlf\n" , n)                                          ;
        printf(x , PI * 4.0 )                                                      ;
}
        编译、运行实况:
D:\[00.Exerciese.2022]\C>g++ -o x x.c

D:\[00.Exerciese.2022]\C>x
请输入想要计算到 pi 的小数点后的位数:4
PI = 3.1416

D:\[00.Exerciese.2022]\C>x
请输入想要计算到 pi 的小数点后的位数:7
PI = 3.1415926

D:\[00.Exerciese.2022]\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 06:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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