
正文
求圆周率的函数C语言指针 计算圆周率c语言程序设计
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
C语言程序设计,用级数计算圆周率π
我写过精确10000多位的,但代码太多无法在此列出,我给你提供一个思路:
定义长度为固定值的字节的数组当做一个“大整数型”,长度为BI_SIZE,数组的0号数为最低8位,往后是更高8位,以此类推。
考虑计算过程中的溢出问题,BI_SIZE要尽量大,但也不能太大,否则算得会很慢。
#define
BI_SIZE
128
定义小数点后的十进制位数PI_NUM,略大于100。
#define
PI_NUM
103
这样的数组定义多个,比如计算函数内部用的工作寄存器如下:
uint8_t
R0[BI_SIZE];
uint8_t
R1[BI_SIZE];
uint8_t
R2[BI_SIZE];
……
用户使用的寄存器如下:
uint8_t
a0[BI_SIZE];
uint8_t
a1[BI_SIZE];
uint8_t
a2[BI_SIZE];
……
定义大整数相关处理函数,包含拷贝、清零、比大小、加、减、乘、移位、除、转十进制ascii等函数。
比如大整数比大小,相等返回0,a大返回1,b大返回-1。
int
BigInteger_Cmp(uint8_t
*a,uint8_t
*b)
{
uint32_t
i;
for(i
=
BI_SIZE
-
1;i
BI_SIZE;i
--)
{
if(a[i]
!=
b[i])
{
if(a[i]
b[i])
return
1;
else
return
-1;
}
}
return
0;
}
凡是运算函数都要使用输入地址的方式,如大整数相加,将a与b相加后的值装入地址c。
void
BigInteger_Add(uint8_t
*c,uint8_t
*a,uint8_t
*b);
调用每一个函数时,输出寄存器不能与输入寄存器冲突。
写除法函数可能比较难,请参考二进制除法相关资料。
打印函数可以用连续除以10求余获得。
函数准备完成后就可以算圆周率了,先用循环算出10的PI_NUM次方作为标准系数EXP[BI_SIZE],计算每一项时分子要先乘EXP再除。由于你的级数公制性质,建议乘和除交替进行,以免数字溢出。
每一项不断累加起来,直到当前算得的项为0为止,累加结果转十进制打印出来。
调试时PI_NUM可以先改小,如果数字正确,就可以改为100多了。
相关问答
Q1: C语言/C++用投针法计算圆周率
代码如下求圆周率的函数C语言指针:
#include iostream
#include fstream
#include math.h
using namespace std;
double randx,randnum;
unsigned long randi=1;
const unsigned long randa=16807;
unsigned long randm=pow(2,31)-1;
const double pi=3.1415926;
// random number creation
void random_number()
{
if ( randi == randm )
{
randi=randm-1;
}
randi=(randa*randi)%randm;
randx=randi;
randnum=randx/randm;
return ;
}
// program main
void main(void)
{
FILE *fp9;
fp9=fopen("mypi.dat","w+");
double jianju;
double zhenchang;
double minjuli;
double hudu;
double shiyanpi;
int cishu;
int i;
int j=0;
cout"请输入投针次数""\n";
cincishu;
cout"请输入平行线间距""\n";
cinjianju;
cout"请输入针求圆周率的函数C语言指针的长度""\n";
cinzhenchang;
for (i=1;i=cishu;i++)
{
random_number();
minjuli=randnum*jianju/2;
random_number();
hudu=randnum*pi;
if(minjuli=zhenchang/2*sin(hudu))
j++;
shiyanpi=2*zhenchang*i/(jianju*j);
if(i%1000==0)
fprintf(fp9,"%d%15.6f \n",i,shiyanpi);
}
}
希望能帮到你求圆周率的函数C语言指针!望采纳!
Q2: 在C语言中编写函数,求出圆周率Pi的近似值
我们经常会运用C语言进行各种数学运算,那么如何用C语言编写函数求圆周率Pi的近似值呢?下面我给大家分享一下。
工具/材料
Dev C++
01
首先打开Dev C++软件,新建一个C语言项目,如下图所示
02
然后在C语言文件中导入math库,并编写求Pi近似值的逻辑代码,如下图所示
03
接下来我们编译编写好的C语言文件,如下图所示
04
最后运行C语言文件我们就得到Pi的近似值了,如下图所示
Q3: C语言求圆周率
#include stdio.h
int main()
{
float f;
double pi,i,sign;
while(scanf("%f",f)==1)
{
pi=0;
i=1;
sign=1;
do
{
pi+=sign*1.0/i;
}while(1.0/i=f(sign=-sign)(i+=2));
printf("%lf\n",pi*4.0);
}
return 0;
}
Q4: C语言计算圆周率
#include "stdio.h"
void main()
{
int n=0;
double i=1;
double sum=0;
while((1/i)0.0000001)
{
n++;
if(n%2==0) i=i*(-1);
sum=sum+1.0/i;
if(i0) i=i*(-1);
i+=2;
}
printf("%lf",sum*4);
}
//刚少了项数
#include "stdio.h"
void main()
{
int n=0;
double i=1;
double sum=0;
while((1/i)0.0000001)
{
n++;
if(n%2==0) i=i*(-1);
sum=sum+1.0/i;
if(i0) i=i*(-1);
i+=2;
}
printf("%lf,项数为%d",sum*4,n);
}
Q5: C语言 圆周率
因为圆面积s=pi*r^2,
所以pi=s/r^2.
点(x,y)是0~1正方形范围内的随机点,如果x^2+y^2=1,则该点在单位圆内.
x^2+y^2就是r^2,即圆半径的平方.d/N为点x,y落入单位圆内的概率,即约为圆面积.
圆的半径为1/2,而不是1,所以pi=4*d/N.
关于求圆周率的函数C语言指针和计算圆周率c语言程序设计的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






