24小时热门版块排行榜    

Znn3bq.jpeg
查看: 2207  |  回复: 10

836449366

金虫 (小有名气)

[求助] 计算圆周率得到的结果错误 已有3人参与

我的程序是计算圆周率,原理是:在一个1*1的正方形及其内切圆(圆心为(0.5,0.5))中,随机数x和随机数y组成的点位于正方形内,但要判断这个点是否也在圆内,当点数很多时,圆内的点数除以总数再乘以4就等于圆周率了(即面积之比),我所编写的程序如下:
      program main
      implicit none
      integer*4 :: i,j,ii,n
      integer*8 :: num
      real*4 :: r
      real*4,allocatable :: x(,y(

      do 100 n=9,12,1
       num=10**(n)
!      num=100000
      allocate(x(num))
      allocate(y(num))
      call random_seed()
      call random_number(x)
      call random_number(y)

      ii = 0
      do i = 1,num
          r = sqrt((x(i)-0.5)**2 + (y(i)-0.5)**2)
          if(r .le. 0.5) then
              ii = ii+1
          end if
      end do
      write(*,"(a,F20.15,D10.2)" "pai=",4.0*ii/num,num*1.0
      deallocate(x,y)

100   continue
      end
运行之后,得到的结果为
pai=   3.141531944274902  0.10D+10               
pai=   3.141597270965576  0.14D+10
pai=   3.141620874404907  0.12D+10
pai=   0.000000000000000 -0.73D+09
对于得到的结果,只有第一个是正确的,后几个都错了,我想问的是我这个程序到底错在哪?怎样进行修改?
(当设置n=5-9时,得到的结果是正确的)
求帮忙!谢谢!
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

laohuajiang

至尊木虫 (职业作家)

老花匠

【答案】应助回帖

另外,因为有下面一句
do i = 1,num
i的类型应与num一致,都改成integer*8

还有integer*4,integer*8的范围是多少,能装下10^12?

稍微改一下,仅供参考。


program main
      implicit none
      integer*8 :: i,j,ii,n
      integer*8 :: num
      real*4 :: r
      real*4:: x,y

                do 100 n=9,12,1
                num=10**(n)
                call random_seed()

                ii = 0
                do i = 1,num
                        call random_number(x)
                        call random_number(y)
                        r = sqrt((x-0.5)**2 + (y-0.5)**2)
                        if(r .le. 0.5) then
              ii = ii+1
          end if
                end do
                write(*,"(a,F20.15,D10.2)","pai=",4.0*ii/num,num*1.0


                100   continue
      end

» 本帖已获得的红花(最新10朵)

静坐常思自己过,闲谈莫论他人非!---老花匠(老非老-春残意彷徨;花非花-芳踪觅繁华,匠非匠-最美难得糊涂!)
4楼2013-12-26 23:49:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

laohuajiang

至尊木虫 (职业作家)

老花匠

【答案】应助回帖

感谢参与,应助指数 +1
那些随机数不必存起来,只设一二个当作坐标。生成一个,计算一个。
当n>9时出错的原因,很可以也在这,10^9毕竟太大了。
静坐常思自己过,闲谈莫论他人非!---老花匠(老非老-春残意彷徨;花非花-芳踪觅繁华,匠非匠-最美难得糊涂!)
2楼2013-12-26 23:32:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Chlo_Q

木虫 (著名写手)

【答案】应助回帖

感谢参与,应助指数 +1
这是什么语言…
只懂basic和c语言的飘过…
数学原理我懂
先设n,m为整数,初始值均为0
设置一个循环,当n大于100000000时停止
n=n+1
随机出一组0~1但不包括0、1的数组x,y,之后判断sqrt((x-0.5)^2+(y-0.5)^2)是否小于0.5,如是,m=m+1
下一个循环
跳出循环后,pai=4*m/n
你对一下你的代码
首先,我觉得你的样本量太少了…这种概率性的计算,要设样本量多一点,反正计算机那么快…

[ 发自手机版 http://muchong.com/3g ]
你的理想是什么?你能为你的理想做什么?为了你的理想你能放弃什么?
3楼2013-12-26 23:42:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ju5200

木虫 (正式写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
836449366: 金币+10, ★★★很有帮助 2013-12-27 17:08:34
只懂matlab 给你试了一下
n=10000000;
z=[];
zn=0;
tempta=[];
x=rand(n,1);
y=rand(n,1);
tempta=sqrt((x-0.5).^2+(y-0.5).^2);
z=find(tempta<0.5);
zn=length(z);
pai=zn/n/0.25


结果:pai =
   3.142021200000000
5楼2013-12-27 10:27:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

836449366

金虫 (小有名气)

引用回帖:
5楼: Originally posted by ju5200 at 2013-12-27 10:27:52
只懂matlab 给你试了一下
n=10000000;
z=[];
zn=0;
tempta=[];
x=rand(n,1);
y=rand(n,1);
tempta=sqrt((x-0.5).^2+(y-0.5).^2);
z=find(tempta<0.5);
zn=length(z);
pai=zn/n/0.25


结果:pai =
...

非常感谢,我运行之后的结果只有小数点四位数,怎么样加大小数点数?还用,加大n,就会发生错误,怎样解决?
6楼2013-12-27 17:11:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

836449366

金虫 (小有名气)

送红花一朵
引用回帖:
4楼: Originally posted by laohuajiang at 2013-12-26 23:49:40
另外,因为有下面一句
do i = 1,num
i的类型应与num一致,都改成integer*8

还有integer*4,integer*8的范围是多少,能装下10^12?

稍微改一下,仅供参考。


program main
      implicit none
      i ...

运行你的程序,得到的结果正确
pai=   3.141503810882568  0.10D+10
pai=   3.141577005386353  0.10D+11
pai=   3.141593694686890  0.10D+12
不过,计算的结果太慢了,计算机应该对这种单一运算应该很快的吧,怎么这么慢?
7楼2013-12-27 17:14:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ju5200

木虫 (正式写手)

引用回帖:
6楼: Originally posted by 836449366 at 2013-12-27 17:11:55
非常感谢,我运行之后的结果只有小数点四位数,怎么样加大小数点数?还用,加大n,就会发生错误,怎样解决?...

在前面声明一下数据精度即可,第一行加上format long;
ps:感觉这种算圆周率的方法本身会有问题,算出来的结果不太精确

[ 发自小木虫客户端 ]
8楼2013-12-27 18:00:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

你这 Fortran 是从哪里学来的,居然还 integer*4, real*4……

一定要用符合标准定义的写法…………
9楼2014-02-07 14:07:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

836449366

金虫 (小有名气)

引用回帖:
9楼: Originally posted by snoopyzhao at 2014-02-07 14:07:12
你这 Fortran 是从哪里学来的,居然还 integer*4, real*4……

一定要用符合标准定义的写法…………

可以这样写,这样也是符合标准定义的写法
10楼2014-02-10 15:04:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 836449366 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 河北省自然科学基金 +5 Peterchao 2026-05-18 8/400 2026-05-24 11:58 by 晓晓爱翠翠
[基金申请] 西安交大新媒学院副院长用撤稿论文结题 +3 bjvtcliu 2026-05-24 5/250 2026-05-24 10:16 by kudofaye
[教师之家] 论文撤稿了 +3 bjvtcliu 2026-05-24 5/250 2026-05-24 10:06 by Equinoxhua
[教师之家] 某211大学教师把个人教师官方主页改成:我跑了我跑了我跑了!官宣跑路! +4 zju2000 2026-05-21 5/250 2026-05-24 09:35 by songwz
[考博] 26/27申博自荐 10+4 ZXW0202 2026-05-22 9/450 2026-05-24 08:47 by bjvtcliu
[硕博家园] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +3 hvkbtfonbv 2026-05-23 3/150 2026-05-24 08:01 by 9ps9vgkqva
[基金申请] 揭秘青基评审内幕:几个A才能顺利中标 +3 国自然国社科中 2026-05-23 4/200 2026-05-23 15:37 by 2000zf36392
[基金申请] 青B发送上会通知了吗 +5 chemBioBro 2026-05-22 7/350 2026-05-23 12:35 by zhuifengzhy
[考博] 博士申请 +3 焦晓明 2026-05-21 3/150 2026-05-23 11:26 by mlc840311
[论文投稿] 投稿求助,期刊 +4 希冀,有书读 2026-05-20 8/400 2026-05-22 10:16 by 希冀,有书读
[文学芳草园] 献血感触 +7 呀呀好傻 2026-05-19 13/650 2026-05-21 20:15 by 呀呀好傻
[基金申请] 面上本子正文33页,违规吗?会被低分嘛? +14 1234567wang 2026-05-17 16/800 2026-05-21 17:58 by 脆脆的饼干
[基金申请] 国自然评分 +4 无名者登山 2026-05-20 5/250 2026-05-21 16:35 by swuq
[基金申请] 国自然上会要求 +7 无名者登山 2026-05-18 11/550 2026-05-21 15:50 by draco1987
[基金申请] 提交了我也来说说感想 +9 fummck 2026-05-20 10/500 2026-05-21 14:17 by draco1987
[基金申请] 评审有感 +15 popular289 2026-05-18 26/1300 2026-05-21 10:35 by 西葫芦炒鸡蛋
[有机交流] 反应很差,大量原料没有反应 5+3 Mr.Zot 2026-05-19 8/400 2026-05-20 22:19 by Equinoxhua
[考博] 如果工作了想读博,可以边工作边读全日制嘛? 30+3 铁达火车 2026-05-18 5/250 2026-05-20 09:33 by tfang
[考博] 博士申请 +5 星…… 2026-05-18 6/300 2026-05-18 23:49 by 糊糊涂涂好
[硕博家园] 我在等一个没有答案的答案 +3 Love_MH 2026-05-17 3/150 2026-05-18 02:22 by 竹林孤影
信息提示
请填处理意见