问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求一个C语言程序,是一个求π的要求精确到小数点后100位的程序。。。。。。

发布网友 发布时间:2022-04-22 22:56

我来回答

5个回答

懂视网 时间:2022-04-23 03:18

这次给大家带来怎样使用JS实现计算圆周率到小数点后100位,使用JS实现计算圆周率到小数点后100位的注意事项有哪些,下面就是实战案例,一起来看一下。

浮点数的有效数位是16位,我自己做了一个大数类,能存储100位有效数位,并实现了大数类的基本运算。我用它来计算圆周率(割圆法,即多边形逼近),得到了小数点后一百位有效数字,比对了Machin 公式的计算结果,没有误差。用时约2秒。

完整示例如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title> js计算圆周率</title>
</head>
<body>
<script>
<!--
function BigNum(str, n, b)
{
 /*
 BigNum -- 大数类
 私有成员:
  data -- 119 位数字,放在长度为 17 的数组里,每个数组元素存放 7 位数字。
  decimal_place -- 小数点的位置,从最左位开始算。
  positive -- 是否是正数。
  recalc() -- 为了尽可能存放最多的有效数位,去除前缀的 0,并重新计算小数点位置。
  init() -- 部分初始化工作。
 公有成员:
  BigNum( String str, INT n, BOOL b) --
  构造函数。参数:str -- 字符串,各个有效数位;n -- 整数,小数点位置,从最左位开始算,比如 BigNum("123", 2) = 12.3; BigNum("123", 0) = 0.123; BigNum("123", -2) = 0.00123;b -- 布尔值,是否是正数。
  Add( BigNum num ) -- 加法。
  Subtract( BigNum num ) -- 减法。
  Multiply( BigNum num ) -- 乘法。
  pide( BigNum num ) -- 除法。
  SquareRoot() -- 平方根。
  toString() -- 转换为字符串(包括小数点),以便以文本形式
输出计算结果。 Clone() -- 复制。 */ this.recalc = function() /* 去除前缀的 0,并重新计算小数点位置 */ { for(var i = 0; i < 17; i ++) { if(this.data[0] != 0) break; this.data.shift(); this.data.push(0); this.decimal_place --; } } this.init = function() /* 部分初始化工作 */ { this.decimal_place = Math.ceil( n / 7 ); //小数点位置 this.data = new Array(17); //保存有效数位的数组 if(n % 7 > 0) { var arr = new Array( 8 - n % 7 ); } else { var arr = new Array( 1 - n % 7 ); } str = arr.join("0") + str; if(str.length > 119) { str = str.substr(0, 119); } else if(str.length < 119) { var arr = new Array(120 - str.length); str += arr.join("0"); } for( var i = 0; i < 17; i ++ ) { this.data[i] = parseInt( str.substr(i * 7, 7) , 10 ); } } /* 初始化开始 */ this.positive = b; if( ! /^0*$/.test(str) ) { this.init(); this.recalc(); } else { this.data = new Array(17); for( var i = 0; i < 17; i ++ ) { this.data[i] = 0; } this.decimal_place = 0; } /* 初始化结束 */ this.Add = function(num) /* 加法 */ { if(this.positive && !num.positive) { num.positive = true; var result = this.Subtract(num); num.positive = false; return result; } else if(num.positive && !this.positive) { this.positive = true; var result = num.Subtract(this); this.positive = false; return result; } var result = new BigNum("", 0, this.positive); var num1,num2; if(this.decimal_place >= num.decimal_place) { num1 = this; num2 = num; } else { num1 = num; num2 = this; } result.decimal_place = num1.decimal_place; if(num1.decimal_place - num2.decimal_place >= 17) { for(var i = 0; i < 17; i ++) { result.data[i] = num1.data[i]; } return result; } var nOffDec = num1.decimal_place - num2.decimal_place; var nTmp = 0; for( var i = 16; i >= 0; i -- ) { var nTmp1 = i - nOffDec; var nTmp2 = 0; if(nTmp1 >= 0) { nTmp2 = num1.data[i] + num2.data[nTmp1]; } else { nTmp2 = num1.data[i]; } nTmp2 += nTmp; nTmp = Math.floor(nTmp2 / 10000000); result.data[i] = nTmp2 % 10000000; } if(nTmp > 0) { result.data.unshift(nTmp); result.decimal_place ++; } return result; } this.Subtract = function(num) /* 减法 */ { if(this.positive && !num.positive) { num.positive = true; var result = this.Add(num); num.positive = false; return result; } else if(!this.positive && num.positive) { this.positive = true; var result = this.Add(num); result.positive = false; this.positive = false; return result; } else { var num1 = num2 = null; var bPositive; if(this.decimal_place > num.decimal_place) { num1 = this; num2 = num; bPositive = this.positive; } else if(this.decimal_place < num.decimal_place) { num1 = num; num2 = this; bPositive = !this.positive; } else { for( var i = 0; i < 17; i ++ ) { if(this.data[i] > num.data[i]) { num1 = this; num2 = num; bPositive = this.positive; break; } else if(this.data[i] < num.data[i]) { num1 = num; num2 = this; bPositive = !this.positive; break; } } } if( num1 == null) { return new BigNum("", 0, true); } else { if(num1.decimal_place - num2.decimal_place >= 17) { var result = new BigNum("", 0, bPositive); for(var i = 0; i < 17; i ++) { result.data[i] = num1.data[i]; } result.decimal_place = num1.decimal_place; return result; } var result = new BigNum("", 0, bPositive); result.decimal_place = num1.decimal_place; var nOffDec = num1.decimal_place - num2.decimal_place; var nTmp = 0; for( var i = 16; i >= 0; i -- ) { var nTmp1 = i - nOffDec; var nTmp2 = 0; if(nTmp1 >= 0) { nTmp2 = 10000000 + nTmp + num1.data[i] - num2.data[nTmp1]; } else { nTmp2 = 10000000 + nTmp + num1.data[i]; } if(nTmp2 >= 10000000) { result.data[i] = nTmp2 - 10000000; nTmp = 0; } else { result.data[i] = nTmp2; nTmp = -1; } } result.recalc(); return result; } } } this.Multiply = function(num) /* 乘法 */ { var bPositive; var nDecimalPlace = this.decimal_place + num.decimal_place - 1; if(this.positive == num.positive) { bPositive = true; } else { bPositive = false; } var result = new BigNum("", 0, bPositive); var nTmpData = 0; for( var i = 16; i >= 0; i -- ) { for( var j = 16; j >= 0; j -- ) { if(isNaN(result.data[j + i])) result.data[j + i] = 0; result.data[j + i] += this.data[j] * num.data[i]; if(result.data[j + i] >= 10000000) { if( j + i -1 >= 0 ) { result.data[j + i -1] += Math.floor(result.data[j + i] / 10000000); } else { nTmpData += Math.floor(result.data[j + i] / 10000000); } result.data[j + i] = result.data[j + i] % 10000000; } } } if(nTmpData > 0) { result.data.unshift(nTmpData); result.data.pop(); nDecimalPlace ++; } result.decimal_place += nDecimalPlace; return result; } this.pide = function(num) /* 除法 */ { var bPositive; var nDecimalPlace = this.decimal_place - num.decimal_place + 1; if(this.positive == num.positive) { bPositive = true; } else { bPositive = false; } var result = new BigNum("", 0, bPositive); var arrTemp = new Array(17); for( var i = 0; i < 17; i ++ ) { arrTemp[i] = this.data[i]; } var bTest = true; var nTest = 0; for( var i = 0; i < 17; i ++ ) { if(bTest) { nTest = Math.floor( ( arrTemp[0] * 10000000 + arrTemp[1] ) / ( num.data[0] * 10000000 + num.data[1] ) ); } else { bTest = true; } if(nTest == 0) { result.data[i] = 0; arrTemp[1] += arrTemp[0] * 10000000; arrTemp.shift(); arrTemp.push(0); continue; } var arrTemp1 = new Array(17); for( var j = 0; j < 17; j ++ ) { arrTemp1[j] = 0; } for( var j = 16; j >= 0; j -- ) { arrTemp1[j] += nTest * num.data[j]; if(arrTemp1[j] >= 10000000) { if(j != 0) { arrTemp1[j - 1] += Math.floor( arrTemp1[j] / 10000000); arrTemp1[j] = arrTemp1[j] % 10000000; } } } for( var j = 0; j < 17; j ++ ) { if(arrTemp[j] < arrTemp1[j]) { bTest = false; break; } else if(arrTemp[j] > arrTemp1[j]) { break; } } if(bTest) { result.data[i] = nTest; for( var j = 16; j >= 0; j -- ) { if(arrTemp[j] >= arrTemp1[j]) { arrTemp[j] -= arrTemp1[j]; } else { arrTemp[j] = 10000000 + arrTemp[j] - arrTemp1[j]; arrTemp[j - 1] --; } } } else { nTest --; i --; continue; } arrTemp[1] += arrTemp[0] * 10000000; arrTemp.shift(); arrTemp.push(0); } result.decimal_place = nDecimalPlace; result.recalc(); return result; } this.SquareRoot = function() /* 平方根 */ { var result = new BigNum("", 0, true); nDecimalPlace = Math.ceil(this.decimal_place / 2); var arrTemp = new Array(17); for(var i = 0; i < 17; i ++) { arrTemp[i] = this.data[i]; } var bTest = true; for(var i = 0; i < 17; i ++) { if( i == 0 ) { if(this.decimal_place % 2 == 0) { var nTemp = arrTemp[0] * 10000000 + arrTemp[1]; var nTemp1 = Math.floor( Math.sqrt( nTemp ) ); var nTemp2 = nTemp - nTemp1 * nTemp1; arrTemp[0] = 0; arrTemp[1] = nTemp2; arrTemp.shift(); arrTemp.push(0); } else { var nTemp1 = Math.floor( Math.sqrt( arrTemp[0] ) ); var nTemp2 = arrTemp[0] - nTemp1 * nTemp1; arrTemp[0] = nTemp2; } } else { if(bTest) { if( i == 1 ) { nTemp1 = Math.sqrt( (arrTemp[0] * 10000000 + arrTemp[1]) + 100000000000000 * Math.pow(result.data[0], 2) ) - 10000000 * result.data[0]; nTemp1 = Math.floor(nTemp1); } else { nTemp = result.data[0] * 10000000 + result.data[1]; nTemp1 = Math.floor( ( arrTemp[0] * 10000000 + arrTemp[1] ) / ( 2 * nTemp ) ); } } else { bTest = true; } var arrTemp1 = new Array(17); var nTemp3 = 0 for( var j = i - 1; j >= 0; j -- ) { arrTemp1[j] = result.data[j] * 2 + nTemp3; if( arrTemp1[j] >= 10000000 && j > 0 ) { nTemp3 = 1; arrTemp1[j] = arrTemp1[j] % 10000000; } else { nTemp3 = 0; } } arrTemp1[i] = nTemp1; nTemp3 = 0; for( var j = i; j >= 0; j -- ) { arrTemp1[j] = arrTemp1[j] * nTemp1 + nTemp3; if( arrTemp1[j] >= 10000000 && j > 0 ) { nTemp3 = Math.floor( arrTemp1[j] / 10000000 ); arrTemp1[j] = arrTemp1[j] % 10000000; } else { nTemp3 = 0; } } var arrTemp2 = new Array(17); for( var j = 0; j < 17; j ++ ) { arrTemp2[j] = arrTemp[j]; } for( var j = i; j >= 0; j -- ) { if( arrTemp2[j] >= arrTemp1[j] ) { arrTemp2[j] -= arrTemp1[j]; } else { if(j > 0) { arrTemp2[j] = arrTemp2[j] + 10000000 - arrTemp1[j]; arrTemp2[j - 1] --; } else { bTest = false; break; } } } if(bTest) { arrTemp = arrTemp2; } else { nTemp1 --; i --; continue; } } result.data[i] = nTemp1; arrTemp[1] += arrTemp[0] * 10000000; arrTemp.shift(); arrTemp.push(0); } result.decimal_place = nDecimalPlace; result.recalc(); return result; } this.toString = function() /* 转换为字符串(包括小数点),以便以文本形式输出计算结果 */ { var szData = ""; var szOutPut = ""; this.recalc(); for( var i = 0; i < 17; i ++ ) { var szTmpData = this.data[i].toString() var arr = new Array(8 - szTmpData.length); szData += arr.join("0") + szTmpData; } if( /^0*$/.test(szData) ) { return "0"; } var n = this.decimal_place * 7; for(var i = 0; i < 7; i++) { if(szData.substr(i, 1) != 0) break; n --; } szData = szData.replace(/^0+/g,""); szData = szData.substr(0, 101); szData = szData.replace(/0+$/g,""); if( n < 1 ) { szOutPut = szData.substr(0, 1) + ( ( szData.length > 1 ) ? "." : "" ) + szData.substr(1) + "e" + ( n - 1 ).toString(); } else if(n == szData.length) { szOutPut = szData; } else if(n > szData.length) { szOutPut = szData.substr(0, 1) + "." + szData.substr(1) + "e+" + (n - 1).toString(); } else { szOutPut = szData.substr(0, n) + "." + szData.substr(n); } return ( this.positive ? "" : "-" ) + szOutPut; } this.Clone = function() /* 复制 */ { var result = new BigNum("", 0, true); for( var i = 0; i < 17; i ++) { result.data[i] = this.data[i]; } result.decimal_place = this.decimal_place; result.positive = this.positive; return result; } } var a = new BigNum("1", 1, true) var count = 168; var nTwo = new BigNum("2", 1, true); function loop(intTmpvar,intCount) { if(intCount == 0) return intTmpvar; var v1 = intTmpvar.pide( nTwo ); var v11 = v1.Clone(); var nTemp = v1.Multiply( v11 ); var a1 = a.Clone(); a1 = a.Multiply(a1); var nTemp1 = a1.Subtract( nTemp ) v2 = nTemp1.SquareRoot(); v3 = a.Subtract( v2 ); var v31 = v3.Clone(); var nTemp2 = v3.Multiply( v31 ); var nTemp3 = nTemp2.Add(nTemp); v4 = nTemp3.SquareRoot(); return loop( v4 , -- intCount ) } var a1 = a.Clone(); var nTemp = a.Multiply(a1); var nTemp1 = nTemp.Clone(); nTemp = nTemp.Add(nTemp1); nTemp = loop(nTemp.SquareRoot(), count); var nFour = new BigNum("4", 1, true); nTemp = nTemp.Multiply( nFour ); nTemp1 = new BigNum("2", 1, true); var nTemp2 = new BigNum("2", 1, true); for(var i = 0; i < count - 1; i ++) { nTemp1 = nTemp1.Multiply( nTemp2 ); } nTemp = nTemp.Multiply( nTemp1 ); nTemp = nTemp.pide( nTwo ); nTemp = nTemp.pide( a ); document.write( nTemp ) //--> </script> </body> </html>

运行结果:

3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

JS常用算法累加、迭代、穷举、递归实现(附代码)

JS callback回调函数使用步骤详解

热心网友 时间:2022-04-23 00:26

Private Sub Command1_Click()
Dim a As Long, b As Long, d As Long, e As Integer, f(801) As Long, g As Long
Dim i As Long
Dim res As String
Dim index As Long
a = 10000
c = 800
For i = 0 To c
f(i) = a / 5
Next i
'预留足够长的缓冲空间
res = Space(9000)
'指针变量,指出在哪里插入字符串
index = 1
Do While (c <> 0)
d = 0
g = c * 2
b = c
Do While (1)

d = d + f(b) * a
g = g - 1
f(b) = d Mod g
d = Fix(d / g)
g = g - 1
b = b - 1
If b = 0 Then GoTo 22
d = d * b
Loop
22:
c = c - 14
substr = Format(Fix(e + d / a), "0000")
'填充字符串的相应区间段数值
Mid$(res, index, 4) = substr
'调整指针变量
index = index + 5
If index > 101 Then Exit Do '只显示100位
e = d Mod a
Loop
'删除多余字符
res = Left$(res, index - 1)
Text1.Text = res
Debug.Print index
End Sub

热心网友 时间:2022-04-23 01:44

这个事要计算的,算法如下。
#include <stdio.h>

long a=10000, b, c=400, d, e, f[401], g;

void main()
{
for(;b-c;)
f[b++]=a/5;
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
for(b=c; d+=f[b]*a, f[b]=d%--g, d/=g--, --b; d*=b);
scanf("%s");
}

热心网友 时间:2022-04-23 03:18

#include <stdio.h>long a=10000, b, c=400, d, e, f[401], g

void main()
for(;b-c;)
f[b++]=a/5;
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
for(b=c; d+=f[b]*a, f[b]=d%--g, d/=g--, --b; d*=b);
scanf("%s");

热心网友 时间:2022-04-23 05:10

printf("101.100%lf",n);
C语言求圆周率100位,求解释,如何让C语言输出小数点后100位

for(;b-c;)g[b++]=a/5;for(;d=0,f=c*2;c-=14,printf( "%.4d ",e+d/a),e=d%a)for(b=c;d+=g[b]*a,g[b]=d%--f,d/=f--,--b;d*=b);这个是100位程序 include&lt;stdio.h&gt; main(){ double i,pi=1;for(i=5;i&lt;=1000000;i=i+4){ pi=pi-1/(i-2)+1/i...

如何用C语言程序实现输出圆周率小数点后100位小数?

double精度不够,只有用数组模拟了。楼上的程序不正确,我改了下 include&lt;stdio.h&gt; int main(){ long a=10000,b=0,c=3500,d=0,e=0,f=0,g[3501];for(;b-c;)g[b++]=a/5;for(;d=0,f=c*2;c-=14,printf( "%.4d ",e+d/a),e=d%a)for(b=c;d+=g[b]*a,g[b]=...

怎样通过编程求圆周率小数点后的100位,1000位

scale = 10000 maxarr = 2800 arrinit = 2000 carry = 0 arr = [arrinit] * (maxarr + 1)for i in xrange(maxarr, 1, -14):total = 0 for j in xrange(i, 0, -1):total = (total * j) + (scale * arr[j])arr[j] = total % ((j * 2) - 1)total = total / (...

C语言程序设计,用级数计算圆周率π

include&lt;stdio.h&gt;int main(){ double pi=2.0; double i=1.0; double a= i; double b= 2*i+1; double t=2*a/b; while(t&gt;=1e-100) { pi = pi + t; i=i+1; a=a*i; b=b*(2*i+1); t=2*a/b; } printf("%g\n",pi)...

c语言如何运用数组做高精度的开方运算,要求精确到小数点后100位

while(!work(0,O,l)) D[l]+=20; putchar((D[l]+1032)/20); } putchar(10); } else { c=o+(D[I]+82)%10-(I&gt;l/2)*(D[I-l+I]+72)/10-9; D[I]+=I&lt;0 ? 0 : !(o=work(

求用c语言黄金分割数的小数后100位的程序,并显示结果

BigNum.c : 定义控制台应用程序的入口点。

c语言,求π,精确到小数点10位

include&lt;stdio.h&gt; float calPI(){float p=0.0,t=1.0;int i;for(i=1;t&gt;=1e-10;i+=2){ t=1.0/i;if(i%4==1)p+=t;else p-=t;} return 4*p;} int main(){ float pi;pi = calPI();printf("π=%f\n",pi);getch();} ...

c语言 求小数的位数

h&gt;int main(){ int i,x,y;char s[100];//用字符串存储浮点数 printf("请输入浮点数:"); gets(s);y=strlen(s);for(i=0;i&lt;100;i++){if(s[i]=='.')x=(i+1);}y-=x;printf("%d\n",y);return 0;} 看来还是没明白你的意思,呵呵 ...

跪求一个vb程序 计算π值 精确到小数点后100位

此程序使用 VB 编写,旨在计算π值,精确至小数点后100位。程序启动时,先定义一系列变量和数组以备使用。程序中首先设置变量 a 为10000,b 为0,d 为0,e 为0,f 数组大小为801,i 为循环计数器,res 为存储结果的字符串,index 为插入位置指针。随后,通过循环将 a 除以 5 存入数组 f,为...

C语言如何实现将一个小数点后100位的小数按小数点后99位四舍五入...

include &lt;stdio.h&gt; define N 100 int main(){ int a[N],n=2,m=3,k,sum=0;int i=0;printf("请输入被除数n:");scanf("%d",&amp;n);printf("请输入除数m:");scanf("%d",&amp;m);k=n%m;sum=n/m;while(i&lt;N){ k*=10;a[i]=k/m;k=k%m;i++;} if(a[99]&gt;=5) a[98]+=...

小数点的精确要求 一个C语言程序是由 精确到个位是保留几位 C语言程序的基本单位 c语言源程序的基本单位 c语言程序100例 用C语言编写的程序被称为 c语言程序编程 用c语言编写的代码程序
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
乾隆小时候的书童是谁 下面对句式判断有误的一项是( ) A.当立者乃公子扶苏(判断句) ...为折线,把 折起,使平面 平面 ,连接 (1)求证: ;(2)求二面角 图中由线段OA、AB组成的折线表示的是小明步行所走的路程和时间之间的关... 动态图像粒度粒形分析仪 oppor9splus视频通话怎么开美颜 微信视频聊天怎么开美颜oppor9 谁家出售二手胶囊填充机NJP1200 NJP-1200A硬胶囊填充机仪器特点简介 NJP-1200A硬胶囊填充机仪器参数 个人借钱的公司有没有 是真的金丝玉吗?求解 未闻花名q版换脸手办怎么拼接 关于手办…!!! 今天发现家里出现了这个像老鼠屎一样的东西,但是家里并没有老鼠的踪迹,并且放在周围的蔬菜、水果都没有 镜音双子手办怎麽换脸 老鼠最怕这东西,家里放一些,老鼠死光光 手办。 粘土x figma!! 手办 有些手办有几种表情,几种动作。是有几个还是可以换面部或者是可以动的? 怎样判断酸性的强弱啊 如何给手办换脸 酸性强弱怎么判断 如何判断物质酸性强弱? 如何判断有机化合物的酸性强弱 如何判断酸性强弱 如何判断酸的强弱 如何判断酸的强弱呢?是从元素周期表吗?是的话该怎样看表? 怎样编写计算圆周率的程序,或者给我圆周率1亿位小数 公司贷款要写个效益情况、负债说明、申请担保的原因、信用能力说明 四个问题50分速求 如何写助学贷款的担保书 怎么清洗吸油烟机里面 地理信息系统应用工程师高级证书可以加分吗 《三维CAD高级应用工程师》的含金量有多少? CAD高级应用工程师证考还是不考呢? 纠结中,真诚地求大师指点,谢谢! iPhone 6 丢失模式能破解吗? 三维CAM数控编程高级应用工程师有这个证书么? 苹果6怎么解丢失模式id锁 苹果6plus丢失模式怎么破解 请问你一下,cad分几种证书,有工程师中高级和应用工程师中高级,这两个是一样的嘛?关于CAD的总共有几种? 捡了个苹果6,屏幕显示已丢失模式,能解吗? 怎么通马桶. 谁会解苹果6s丢失模式? 怎么样通马桶 苹果6id锁丢失模式能解开吗?不硬解 实物抵押贷款 征信没有恢复可以实物抵押贷款吗? 邹城有没有做实物抵押贷款的 想借五佰万需要实物抵押吗? 光电股份厂牌 600184光电股份这只股票现在怎么样?