EDA365电子工程师网

标题: skill用蒙特卡罗法算圆周率(据说可以测性能) [打印本页]

作者: chrysalis    时间: 2015-12-12 14:14
标题: skill用蒙特卡罗法算圆周率(据说可以测性能)
本帖最后由 chrysalis 于 2015-12-14 08:39 编辑

来源于这里:
http://www.zhihu.com/question/27768721

提问的人表示,vba要570ms,而python要7秒。
我把vba的程序拿到我电脑上跑了下,大概410ms,我就估摸着用skill跑大概要多久,于是把这个算法移植到了skill上面。

代码:


  1. axlCmdRegister("test3" 'test3)

  2. defun(test3 ()
  3.         prog((l_time x_rand1 x_rand2 x_radius x_loop x_count x_rand1Opp x_rand2Opp f_pi)
  4.                 l_time = measureTime(
  5.                         x_radius = 100
  6.                         x_loop   = 2500000
  7.                         x_count  = 0
  8.                         for(i 1 x_loop
  9.                                 x_rand1 = random(x_radius)
  10.                                 x_rand2 = random(x_radius)
  11.                                                        
  12.                                 when((x_rand1 ** 2 + x_rand2 ** 2) <= (x_radius ** 2)
  13.                                         x_count = x_count + 1
  14.                                 );when
  15.                                                        
  16.                                 x_rand1Opp = x_radius - x_rand1
  17.                                 x_rand2Opp = x_radius - x_rand2
  18.                                 when((x_rand1Opp ** 2 + x_rand2Opp ** 2) <= (x_radius ** 2)
  19.                                         x_count = x_count + 1
  20.                                 );when
  21.                         );for
  22.                         f_pi = x_count / float(x_loop) * 2
  23.                 )
  24.                 printf("%f time:%f\n", f_pi nth(2 l_time))
  25.         );prog
  26. )






  27.        
复制代码

实际跑了一下,大概要3秒左右,比我想象中快(我以为会和python差不多),看来skill优化还是挺好的。(或许是Lisp的优越性?)
-----

在自己的电脑上跑了下python代码,要4.24秒。这么一看skill也没比python快到哪儿去……





欢迎光临 EDA365电子工程师网 (https://bbs.elecnest.cn/) Powered by Discuz! X3.2