数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 5208|回复: 6

****如何用C求出"圆周率"的值?****

[复制链接]
发表于 2005-9-22 07:21:20 | 显示全部楼层 |阅读模式
<>如何用C语言求出"圆周率"的值?</P>
<>就是圆的"周长"与"直径"的比值!</P>
<>好象很难啊~!</P>
发表于 2005-9-22 19:17:57 | 显示全部楼层
计算法很多,关键能否达到可空精度。
发表于 2005-9-22 20:34:33 | 显示全部楼层
C语言不懂。但我在Maple上试过,可一直算到超过祖冲之的精度。
 楼主| 发表于 2005-9-23 02:10:32 | 显示全部楼层
<>怎么大家都没有诚意啊,都是说些大话~!</P>
<>我想更多的网友是希望看到具体的答案啊~!</P>
发表于 2005-9-23 20:20:12 | 显示全部楼层
<>具体方法就是当年刘徽的“割圆术”,一直割到圆内接12288边形和外切24576边形,就可得到祖冲之的结论。再继续,精确度更高。以下是在Maple上编程实现的。</P>
<>a(1):=1:pn(1):=3*a(1):b(1):=a(1)/sqrt(1-0.25*a(1)^2):pw(1):=3*b(1):<BR> for i from 1 to 16 do </P>
<> a(i+1):=evalf(sqrt((1-sqrt(1-0.25*a(i)^2))^2+0.25*a(i)^2),60):</P>
<P> pn(i+1):=evalf(3*2^i*a(i+1),60):</P>
<P> b(i+1):=evalf(a(i+1)/sqrt(1-0.25*a(i+1)^2),60):</P>
<P> pw(i+1)=evalf(3*2^i*b(i+1),60)d:</P>
<P> pn6144:=pn(11);pn12288:=pn(12);</P>
<P> pw24576:=evalf(3*2^12*b(13),60);pw12288:=evalf(3*2^11*b(12),60);<BR></P>
 楼主| 发表于 2005-9-25 03:48:44 | 显示全部楼层
<>谢谢楼上的作出解答~!</P>
<>但是Maple本身就是一个集成环境,用了很多集成的函数,比如sqrt函数(算术平方根),所以就会出现有限精度的问题(就用到了exalf函数).</P>
<>这是数值计算的思维逻辑,而不是我们需要的最基本的算法(比如符号计算)!比如sqrt函数又是如何实现的!</P>
<P>有没有其他高手给出答案啊!!!</P>
发表于 2005-10-2 09:34:20 | 显示全部楼层
<>符号计算的有点麻烦,不过以前看到过一个概率算法很有意思,但是精度太低最好能算到3.141。。。而且随机性比较大    只是好玩罢了。。。^_^</P>
<>C++语言描述:</P>
<>#include&lt;iostream&gt;<BR>#include&lt;ctime&gt;<BR>#include&lt;cstdlib&gt;<BR>using namespace std;<BR>void getPi(long double &amp;,long double &amp;);<BR>void main()<BR>{<BR> long double s=0,x=0,y=0,c=0;//s 总共产生的随机点数,c是落入1/4圆内的随机点数<BR>nst long double R=0.5;<BR> double startTime,endTime;<BR> srand((unsigned int)time(NULL));<BR> startTime=clock();<BR> <BR> for(long i=0;i&lt;5000000;i++)              //多次取平均值<BR><BR> s++;<BR>  getPi(x,y);<BR>  <BR>  if(x*x+y*y&lt;=R)<BR>   c++; <BR> }<BR> cout.precision (9);<BR> cout&lt;&lt;4*(c/s)/(R)&lt;&lt;endl;<BR> <BR> endTime=(double)(clock()-startTime)/(double)CLOCKS_PER_SEC;<BR> <BR>}<BR>void getPi(long double &amp;x,long double &amp;y)<BR>{<BR> //srand(time(NULL));<BR> x=(long double)rand()/RAND_MAX;<BR> y=(long double)rand()/RAND_MAX;<BR>}</P>
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-11-27 07:39 , Processed in 0.048027 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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