QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3289|回复: 0
打印 上一主题 下一主题

Forcal运行速度测试例子

[复制链接]
字体大小: 正常 放大
forcal 实名认证       

45

主题

3

听众

282

积分

升级  91%

  • TA的每日心情
    难过
    2012-8-27 18:22
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2010-9-27 19:28 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    Forcal的运行效率与Lua相当,是目前最快的脚本之一,但Forcal的扩充性能更好。
    3 T; G; T9 |9 E) U8 S在大量函数调用时,Forcal更具速度优势。
    - I$ C2 r" A4 p) H" J2 i以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。
    % B6 {, X" o* g! d1 ?* P6 v) M3 W6 W# ?$ ]
    & w7 _" R$ g7 i. S) {% I例1:Fibonacci递归程序(n取40)
    ) K! ^8 x2 V% \; c
    1. SetRealStackMax(1000);7 w; s9 u8 Z( x\" R+ a- {
    2. F(n)= which{/ u9 D9 ]/ {( Z0 f
    3.         n == 0,7 s- n# N$ E% L( \( j1 n# i, }
    4.                 return(0),
      : |- ?, w! l, J; `
    5.         n == 1,9 l' ^2 i% w) i8 Y% U4 d& ^$ B* Z
    6.                 return(1),) q9 P: B2 z4 a5 P6 i
    7.         return [F(n - 1) + F(n - 2)]) ~: i- }$ u1 s. T
    8. };* L. Q) Z. M: |2 P/ c3 p6 A
    9. main(:t,n)=
      & A- U1 d! [; S- A/ @0 t: j
    10. {. H: h7 j- O. ]8 Z
    11.         t=sys::clock(),1 C2 c' A* h& D, k
    12.         n=F(40),7 ~6 I; E6 [, j
    13.         t=sys::clock()-t,
      4 h, N& n5 y! \6 o) J  i( u9 X
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}
      9 j' {- g2 x* ~
    15. }; 8 D, m% H: A, x( ~8 W
    复制代码
    结果:
    9 W2 ?& g/ ^- {0 p$ P; T+ U% z3 E) L4 [
    fibonacci=102334155, fibonacci_Time=41859毫秒=41秒
    ; h  y1 n  }7 l+ Y5 Z
    ; B. h1 |/ r# W: Z( w# ~: b例2:八皇后问题7 n8 `5 l0 @; G
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。
      7 U& G; j3 |, m# R& O/ x: l
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。) n$ @$ O) Y. _+ B) V9 S- J7 o1 U
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。3 H: z+ Z4 u% C' N6 Z3 m+ ~
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。
      7 V/ x# X+ S5 m6 P
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。: _! p# ?8 ~0 N* }- k/ u5 d
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。- s1 D0 x' L( m9 }& h* [  a
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
      : Q* ^8 y3 U  `5 ?7 T. Q) E( u2 l
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
      % w- J* o% V, s0 i% a' u, g
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。 ' d' ?8 ^: c( {9 c( c4 W
    10. //Forcal源程序5 O3 m' b3 M* L' [- L\" Q% Z
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);
      ) D5 \6 _# h' M( J4 g) i
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=
      4 I. Q% w' V0 i$ d2 h5 \/ y- E
    13. {
      \" T( r  K' v\" }* j7 ]' h# f* y
    14.     which
      ' e8 N# `4 ], ^  x2 o% u: L
    15.     {   row != upperlim,- \5 l\" _0 t! Q  P* E
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},/ f, J# A6 @6 x% i
    17.             while{ pos,
      1 [$ ^0 U. K8 C; _
    18.                 p = and(pos,-pos),) ?$ ?6 _7 t0 B8 t+ Z4 j0 E
    19.                 pos = pos -p,; g/ ~. C/ T( f: m8 O! r( a% G
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))
      0 m6 U3 n* k# l
    21.             }
      ( ?% M; ~4 B0 \& k8 r
    22.         },
      # Z# v1 Z2 T9 S3 ~
    23.         sum++; {3 Z  T3 @! Q- k) O
    24.     }
      0 v* n5 H7 v# S  M! }. F) R* h3 p2 y+ ~
    25. };0 R! _2 T* z( v! L+ s! K! t
    26. i:main(:tm,n:sum,upperlim)=
      ' ]; N\" s# S) M9 |
    27. {, z  ^! J* N2 g
    28.     n=15,
      0 T! W+ r$ R& u+ g4 a
    29.     tm=sys::clock(),
      ; S6 k2 B, x6 Y$ t1 A+ o7 C
    30.     printff("Queens:{1,i}, ",n),9 g- C6 w2 v+ s' Y# x8 E. V
    31.     upperlim=shl(upperlim,n)-1,' ]: O1 e: m1 n8 z
    32.     test(0,0,0),
      : @; }4 y% w# d3 S8 ?- Y1 i1 y
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)
      1 a' t. m! I. e6 ~
    34. };
      - ?- h3 T+ b9 r8 u. q
    复制代码
    Forcal运行结果:
    * j  E- n. y/ U/ W0 P0 q$ g) N& A% u0 x$ B  v" q* e+ f6 J4 W/ b
        Queens:15, sum:2279184, 59547毫秒.
    - K* |. R! M& \; O, p' }$ K" X2 G' X
    例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右, _! q) h0 V# g" c/ j
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =+ ]6 I  R6 f; N( \4 |
    2. {
      % s! B! n3 S8 r0 _' s) ?7 {
    3.         cr = y - 0.5,7 j9 Q( f% h/ n. L. \
    4.         ci = x,
      , q2 n! f* V* h7 G1 _& X
    5.         zi = 0.0,
      3 }( j# E( w% W* P$ f( n+ {( W+ Z
    6.         zr = 0.0,# ?% b. S. B2 L1 b5 o! F/ V
    7.         i = 0,
      # c1 J* r4 Q  _; Q4 f
    8.         (1).while {
      + m7 n0 f( O1 g1 g  Q7 A- w) N
    9.                 i ++,, S; [) x. Q' g* E% s7 S8 V3 }
    10.                 temp = zr * zi,
      : N  I1 A* X* d. o( B- G8 G
    11.                 zr2 = zr * zr,
      $ B+ C1 J# F; h5 H6 N$ @, C
    12.                 zi2 = zi * zi,( g1 h+ y! m& t
    13.                 zr = zr2 - zi2 + cr,\" f9 e8 W( ?2 \; Z: c
    14.                 zi = temp + temp + ci,- Q9 `4 o3 E$ {\" u/ K
    15.                 if [zi2 + zr2 > 16, return (i)],
      ' l) j/ D* E% L
    16.                 if [i > 1000, return (0)]
      \" l! n2 s3 I5 G6 U
    17.         }
        y8 C' X; \7 E' I0 M  o4 ?
    18.         9 A+ {; S7 y. t% b( P+ d! X
    19. };
      % K/ X9 d/ ^/ N  N& o7 f
    20. main (:i,x,y,old,now) = {
      3 Z7 N9 d, A9 R4 l; h: O\" V! E& _
    21.         old=sys::clock(),1 `9 F$ \1 n\" @; `/ Z$ D$ e! U( ]
    22.         y = -39,
      : r$ P; X. s! L\" V  y
    23.         while{  y < 39,
      $ k8 ^. _, s! {! H2 P8 M; b
    24.                 printff("\r\n"),7 E) j0 ^1 e3 W! E6 H+ w
    25.                 x = -39,: V, L7 ^, e+ S; ]! I
    26.                 while{  x < 39,6 B  Q% r5 ^( ~$ r  C' j
    27.                         i = mandelbrot(x/40.0, y/40.0),  }0 M6 w6 [# V  ~8 \0 K
    28.                         which{        i==0,
      ! O4 T7 v9 i* @. x: z
    29.                                 printff("*"),
      5 |\" {+ y6 B; @0 u! H, k\" d
    30.                                 printff(" ")
      4 @( S4 D$ h  I7 `7 P3 ~
    31.                         },
      \" [  b5 [\" _! Y3 c5 t$ h
    32.                         x++0 G5 L6 S' k# W: T) C  m
    33.                 },
      + A) h( D3 \( N/ O: J) i  i& a
    34.                 y++0 S# j4 E4 ~2 m
    35.         },
      ' `2 M' U  N) s2 P9 Z( p, B
    36.         now=sys::clock(),
      / ~- P- y/ c, t+ O
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000). C: J! L7 ~\" k4 _, V7 D
    38. };6 ?# k3 P! Z( C2 d
    复制代码
    ! M1 u3 C% S6 K" Y4 z# a  h% V; d! R
    运行结果:
    ! Y) v; `. w6 G* P, |, a
    1.                                        *7 w6 i% D. S% u9 V& d
    2.                                        *
      3 t' O* i7 u7 F) s+ r- b) J
    3.                                        *3 w) X  w$ |5 e2 C- K1 `
    4.                                        *
      , ]% q: z8 p8 ?' W
    5.                                        *0 g  d1 l\" @2 z% F+ l1 G
    6.                                       ***3 I' y: R+ j# ?# Q
    7.                                      *****) d4 [' i; ^8 M! R
    8.                                      *****# a( k! R; u& h0 @. M3 b, H
    9.                                       ***; h$ c% U( Y/ x8 D' {% r
    10.                                        *
      7 C# r6 b: a/ x% L% \3 g
    11.                                    *********
      1 ]$ z3 l' a0 G8 r
    12.                                  *************0 [, t; b* A( {: d* }+ U, B  u
    13.                                 **************** {  P4 c: Y4 h! {  z
    14.                              *********************
      1 w. ?6 h2 y6 j3 U' m
    15.                              *********************9 S( u+ f# ^7 l0 Q
    16.                               *******************' }4 m& K/ T0 Q6 L* u! l
    17.                               *******************. p1 T& z+ h$ m
    18.                               *******************
        z! @$ q2 f1 I  C# M' m. z
    19.                               *******************
      * Z7 D: s8 e  ?# ?$ G2 @+ C
    20.                             ***********************
      7 t9 n0 \+ k% v6 x/ H
    21.                               *******************6 ?6 _5 y* d' n\" n6 a& l
    22.                               *******************9 C9 o7 M8 z( |2 _
    23.                              *********************
      ) e$ H6 @0 x, H! n+ b. _. j
    24.                               *******************
      3 N\" a) u. P: A5 B
    25.                               *******************
      , B9 w0 y9 S; X, h+ |1 r
    26.                                *****************
      / @; H. {' ~9 p) c
    27.                                 ***************; h7 R! }7 ~6 y. \
    28.                                  *************
      ! y( [$ l8 b+ v% C+ c) h
    29.                                    *********# `. b8 M+ x( D/ x# b
    30.                                        *
      5 K- ~6 W, K6 d
    31.                                 ***************/ j3 B\" T! ?- F% J4 \: X
    32.                             ***********************: \5 w4 G4 Y& A+ q/ `, y, t\" Q
    33.                          * ************************* *- r% q9 L- I9 A
    34.                          *****************************
      , o2 v& t: d1 J# P: E% t! z4 o
    35.                       * ******************************* *
      - X, ~\" a9 N, ~9 Y; i
    36.                        *********************************
      % Z: C) X( E) \5 G
    37.                       ***********************************
      6 ^# q4 [- }& v# z* \' C6 w+ [
    38.                     ***************************************
      1 Y3 z\" g/ m0 Z& {: r. @' s) i
    39.                *** ***************************************** ***
      ' |2 y0 V& _: @\" X1 }( e
    40.                *************************************************\" u. E* }# }5 W8 L5 e6 u- ~2 F
    41.                 ***********************************************
      % V: K. r: W6 g1 @/ _! a. a' G
    42.                  *********************************************
      ; E- _% `* n' D\" O  `1 K; g
    43.                  *********************************************
      ' E$ y7 L% o* \6 G, X
    44.                 ***********************************************\" G- _8 W$ P. f$ c) U( |. H4 C
    45.                 ***********************************************0 e: H& b& h8 Q' Z/ u
    46.               ***************************************************
      \" {# m9 i! _\" u6 h9 Y. w% D
    47.                *************************************************3 _. D1 i+ e7 C- J! r
    48.                *************************************************
      ! `4 s4 y6 ?1 m: }$ B
    49.               ***************************************************7 z$ N& E& T$ {, M3 j9 o
    50.               ***************************************************
      4 g+ ?* b5 a- v  X\" i+ ]
    51.          *    ***************************************************    *
      # C1 N- W- Y) f; t3 w
    52.        *****  ***************************************************  *****2 M% R  U9 Y1 _& ?. a
    53.        ****** *************************************************** ******
      / t6 a2 U& }+ b7 i
    54.       ******* *************************************************** *******- C; G7 L& q  s) b& a9 V1 |
    55.     ***********************************************************************, L9 P7 b% l' @\" k5 L: d
    56.     ********* *************************************************** *********
      ( {- |+ Q9 l  e1 l. J7 @
    57.        ****** *************************************************** ******5 `3 \) W, |3 V) [; ]# u
    58.        *****  ***************************************************  *****
      1 \. Y* s7 [  q' R. [1 p
    59.               ***************************************************  G9 s/ @  v) J1 F
    60.               ***************************************************
      4 U3 ~. T2 F\" g0 ?8 ?# t5 Y3 t5 f
    61.               ***************************************************  D! h* g2 t8 p\" J/ g\" O2 n
    62.               ***************************************************; o, @+ N& D1 E5 L& k, @
    63.                ************************************************** r$ @8 E- _1 x
    64.                *************************************************
      % ?, V( Z0 ^- A) ?& u
    65.               ***************************************************
      : [) x% f5 u0 G# d% C4 a# ^
    66.                 ***********************************************/ S6 Z5 b3 p% j
    67.                 ***********************************************; r) S; ^. I+ v* N7 y3 k
    68.                   *******************************************7 i3 }4 c( V: g- q4 a' J! M8 h
    69.                    *****************************************9 c* A) q2 s6 c! ^\" S: r/ y2 k
    70.                  *********************************************
      : U+ O  v% N4 A  L3 {( o
    71.                 **** ****************** ****************** ****0 N+ B* y0 J' }' R! Y& m
    72.                  ***  ****************   ****************  ***; D: A  H& o3 J8 _6 i
    73.                   *    **************     **************    *
      ! U; N: f) d5 u/ ?# I. Y. ^) U
    74.                          ***********       ***********
      6 I, ?. D* @* R( Z2 ~0 B3 E
    75.                          **  *****           *****  **2 f6 p2 h* G) S/ d1 C$ I! X
    76.                           *   *                 *   *
      / [, `5 `- ~/ B) C) s/ \0 C
    复制代码
    $ i0 \+ ~$ h: B+ a/ H4 x, O1 k: ?
    运行时间为:
    ' h! K& }3 y& |* |/ c. ?5 H/ ^, n  O9 G
            Forcal Elapsed 1.078  ^& e8 t) y, v8 E1 V
    zan
    已有 1 人评分威望 收起 理由
    厚积薄发 + 1

    总评分: 威望 + 1   查看全部评分

    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-8-31 21:52 , Processed in 0.427231 second(s), 52 queries .

    回顶部