tft每日頭條

 > 圖文

 > c語言編寫一個簡易的計算器

c語言編寫一個簡易的計算器

圖文 更新时间:2025-04-19 18:28:01

首先介紹一下計算公式,涉及兩位大神,牛頓和歐拉。

c語言編寫一個簡易的計算器(分享一個利用C語言計算π的實現)1

反正切級數歐拉變換

這個方法收斂速度可以接受,但非最優方法,每算一項得到0.3個有效數字。

我們把公式展開:π/2=1 1/3 1/3*2/5 1/3*2/5*3/7 …… 1*2*3*……n/3*5*……*(2n 1)

并根據無窮遞減的等比數列可知:

1/3 = 1/3*1/2 1/3*1/2*1/2 1/3*1/2*1/2*1/2 .......

因此,1/3 > 1/3*2/5 1/3*2/5*3/7 …… 1*2*3*……n/3*5*……*(2n 1)

所以式中第n項之後的所有餘項之和Sum(Rn)<An因此,隻要選取n,使得An滿足An<1/10^(x 1)即可,根據對數運算規律:

c語言編寫一個簡易的計算器(分享一個利用C語言計算π的實現)2

對數運算法則

lg1/3 lg2/5 …… lgn/(2n 1)<-(x 1),即lg3 lg5/2 ...... lg(2n 1)/n<x 1。于是可設置對數累加實現計算到x位所需的項數n,為确保準确,算法可設置計算位數超過x位(如5位)但隻打印出x位。

然後我們可以利用C語言實現高精度乘除法來進行對π的求解。下面給出代碼:

#include<stdio.h> #include<math.h> int a[5000]; int main() { // π/2=1 1/3 1/3*2/5 1/3*2/5*3/7 …… 1*2*3*……n/3*5*……*(2n 1) // π/2= 1 1/3(1 2/5(1 …… (n-1)/(2n-1)(1 n/(2n 1))……); float s; int b,x,n,c,i,j,d,l; printf("歡迎您的驗證,現在我們開始驗證π的高精度的計算。\n"); printf("請輸入精确位數:"); scanf("%d",&x); for(s=0,n=1;n<=5000;n )//累加确定項數n. { s=s log10((2*n 1)/n);//對數的加法對應各項相乘 if(s>x 1) break; } //高精度:數組高位存數字低位,a[0]保存π的整數位 for(c=1,j=n;j>=1;j--)//按公式分布計算,計算時,從2n 1反向計算 { d=2*j 1; for(i=0;i<=x 4;i ) //各位實施除2j 1.除法從數字高位到低位 { a[i]=c/d; c=(c%d)*10 a[i 1]; } a[x 5]=c/d; for(b=0,i=x 5;i>=0;i--)//各位實施乘j.乘法數字低位到高位 { a[i]=a[i]*j b; b=a[i]/10; a[i]=a[i]; } a[0]=a[0] 1;//加一直接作用在整數位 c = a[0]; //更新下次運算的被除數 } //公式所求為 π/ 2故需要對結果乘2 for(b=0,i=x 5;i>=0;i--) { a[i]=a[i]*2 b; //該位乘2并加進位值 b=a[i]/10; //高精度乘之進位值 a[i]=a[i]; //計算本位數值 } printf("PI=%d.",a[0]);//諸位輸出計算結果。 for(l=10,i=1;i<=x;i ) { printf("%d",a[i]); l ; if(l==0) printf(" "); if(lP==0) printf("\n"); } return 0; }

最後分享一下小數精度1000位的π

c語言編寫一個簡易的計算器(分享一個利用C語言計算π的實現)3

高精度π

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved