導航:首頁 > 編程語言 > c語言編程圓周率

c語言編程圓周率

發布時間:2023-02-02 06:25:41

『壹』 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多了。

『貳』 C語言編程求出圓周率的近似值。

#include <stdio.h>


int main()

{

double pi;

unsigned long i,n;

scanf("%lu",&n);

for(pi=1,i=1;i<=n;++i)

{

pi*=(i+1)/2*2.0 / ( (i+1)/2*2+(i-1)%2*2-1 );

}

printf("pi=%.10lf ",pi*=2);

return 0;

}

『叄』 C語言計算圓周率

#include<stdio.h>
#include<math.h>
intmain(){
doublep=0,q=0;
inti;
for(i=1;;i++){
p+=6*1.0/(i*i);
q+=4*1.0*pow(-1,i+1)/(2*i-1);//q後面少一個+
if(fabs(sqrt(p)-q)<1e-6)
break;
}
printf("PIis%lf,項數為%d",q,i);
return0;
}

閱讀全文

與c語言編程圓周率相關的資料

熱點內容
離心機壓縮機揚程高 瀏覽:656
xshell連接linux命令 瀏覽:5
把多個文件夾的內容合並在一起 瀏覽:481
基於單片機的澆花系統設計ppt 瀏覽:683
卷積碼編解碼及糾錯性能驗證實驗 瀏覽:352
請在刪除驅動器之前暫停加密什麼意思 瀏覽:785
光催化pdf 瀏覽:98
java字元串包含某字元 瀏覽:526
ssm身份認證源碼 瀏覽:466
預排序遍歷樹演算法 瀏覽:671
加密裝置如何打開ping功能 瀏覽:478
python下載372 瀏覽:901
u盤子文件夾隱藏 瀏覽:296
本地誤刪svn文件夾 瀏覽:685
海康威視python通道名 瀏覽:241
如何用app覆蓋全部曲庫 瀏覽:602
變異布林源碼 瀏覽:686
表格加密設置列印區域 瀏覽:437
卡耐基pdf下載 瀏覽:924
現在最流行的單片機 瀏覽:89