QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3422|回复: 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的扩充性能更好。
    7 p! R% J% b; l! T& K5 r; E在大量函数调用时,Forcal更具速度优势。
    - D5 n6 Z/ m+ y9 ^0 O以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。+ D& s3 r9 }8 d3 ]( o9 V" j
    5 C) N! }9 Y  y; c9 S. y0 t
    例1:Fibonacci递归程序(n取40)! U% c- n3 O; c0 m
    1. SetRealStackMax(1000);0 f  S* `2 [' l* v. q
    2. F(n)= which{; T+ P0 I$ n6 U6 u$ K5 {- M
    3.         n == 0,1 |4 H4 i6 y9 H7 n
    4.                 return(0),7 p: ]3 D, [2 e+ l$ D+ ~: u' A/ B. \
    5.         n == 1,
      . ^+ K& v1 F' `6 S
    6.                 return(1),
      ; Y8 z# t6 K, w5 ]\" _
    7.         return [F(n - 1) + F(n - 2)]/ F9 b) e8 e\" P# b
    8. };
      / A* N! F4 y, j# C2 Q\" `
    9. main(:t,n)=7 R$ x+ b- ?0 B\" l1 Y
    10. {
      - ~; x7 Z* d7 G# U& y- D
    11.         t=sys::clock(),
      5 G6 S: i+ q- [* c) y( z
    12.         n=F(40),
      ! Q4 X. H6 h: H& m
    13.         t=sys::clock()-t,3 _' L6 t\" b; E- G* o\" b+ a* z
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}
      8 x, Z8 K* d\" E: h3 L7 l
    15. }; / \! F( Y9 l! @9 d- ~; J7 b/ F
    复制代码
    结果:* p* L0 O1 @7 a1 W$ P
    5 I2 i- q% ?5 P
    fibonacci=102334155, fibonacci_Time=41859毫秒=41秒
    $ Q1 T; I6 n, M* D
      o# u6 ?$ I' t8 q4 m  W例2:八皇后问题
    ' w$ ^$ Y( d; O" o8 ?
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。
      6 b# ?, i; e, q) K% G
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。- O& l3 ^' T) y
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。
      8 H- r1 ]' v1 P0 Z3 k+ Y- _
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。
      \" G/ |: w\" f$ ^$ a( Z9 U9 G
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。
      9 I7 [4 ~+ \! o
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。# S* P/ \, o6 C' H: Z
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。\" W! j9 }( }) v5 {
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。# m1 P$ D8 h4 a
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。 5 u2 A2 X! D- d. h( i# q5 Y- c$ l
    10. //Forcal源程序  h/ o5 f. A8 t2 B
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);
      ! Y7 V5 r( L3 N0 G3 R
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=
      % w6 e( H- R( B+ i( a
    13. {
      : o4 X2 B; e$ v- B) a# ~/ [& t9 S5 s
    14.     which( y% F  Z1 U4 |
    15.     {   row != upperlim,7 J9 L5 t$ g1 z0 X, l
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},
      - p! n! b4 v8 ~2 R
    17.             while{ pos,+ T) K2 t5 l% z( h
    18.                 p = and(pos,-pos),/ B( R0 \( e2 `2 }$ b( E! n
    19.                 pos = pos -p,
      + U2 Z. c6 r& {; }3 ]/ @
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))+ D& f) c1 ]0 V5 ]+ w
    21.             }7 t& e' y! f, s7 p
    22.         },\" _9 Z: c1 ^; Z
    23.         sum++! q\" d5 D8 \( L( X& }1 D
    24.     }, G2 W! z1 f* T7 B2 }
    25. };- T6 s0 G# {, d3 `
    26. i:main(:tm,n:sum,upperlim)=8 }2 g9 z  P! p0 G6 w# ]
    27. {
      8 i' ^. o! `. }& V
    28.     n=15,
      ; P/ ^4 ?: ~5 h# c3 v% Z
    29.     tm=sys::clock(),  T+ T  C  F4 I/ L0 y- t
    30.     printff("Queens:{1,i}, ",n),
      5 X2 K2 }9 v; F4 e8 h7 C6 S# M
    31.     upperlim=shl(upperlim,n)-1,
      ' E\" u, s; }: e1 p: g9 Y
    32.     test(0,0,0),
      9 J' g\" |/ |* }4 c
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)
      2 w8 l; f' J( K) u* W9 L) n) x
    34. };
      . V2 i( ]5 r# C
    复制代码
    Forcal运行结果:
    , U5 z5 P3 I' a/ c/ @, E2 Q6 y' D2 x( o' c# M4 M' B
        Queens:15, sum:2279184, 59547毫秒./ z5 X3 v6 Z1 }% a9 S# Y9 R
    ) l4 T) q2 k2 q( H
    例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右
    / A% L1 W: Z( B: K9 k
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =
      : B# [+ L& D& A# D1 i: F6 w% K$ Y
    2. {
      & x( _\" {! `6 B4 z+ D
    3.         cr = y - 0.5,
      ; ]4 A( x; g( l/ z1 j: i$ e! U* N
    4.         ci = x,
      $ P; ^3 ]4 j9 ~
    5.         zi = 0.0,- [4 n2 \# j, w) d
    6.         zr = 0.0,
      & G. M% W4 Z: |; L& o8 F  M\" s# A# {
    7.         i = 0,
      / |# T, _3 s: O% i/ e% E% T9 l6 v( n0 q
    8.         (1).while {  X$ }+ Q4 p\" i' }\" v6 l. p9 B  y
    9.                 i ++,8 K3 Z9 m& W# p  T3 z
    10.                 temp = zr * zi,/ P9 b) t2 X  S9 {* h
    11.                 zr2 = zr * zr,
      1 }, D( J6 J9 y3 ]- r& E
    12.                 zi2 = zi * zi,' J; X0 F: p# V+ D& B6 w6 P- f1 s# X$ X
    13.                 zr = zr2 - zi2 + cr,2 P7 \6 H% J\" u4 \% z
    14.                 zi = temp + temp + ci,+ u6 ^, }( P. p+ v( a( N7 R
    15.                 if [zi2 + zr2 > 16, return (i)],
      1 _$ w% O+ e2 Z
    16.                 if [i > 1000, return (0)]
      ! X. D9 _9 t; |- c: T, J
    17.         }
      / |* W. h/ x. I! n/ p' J
    18.         7 e1 _' O/ V' f\" G1 u* W8 S
    19. };( D* X+ f8 C8 V8 G4 X
    20. main (:i,x,y,old,now) = {
      5 z3 X& O. D5 ~
    21.         old=sys::clock(),: Q% n& H; r) [4 W) s/ F# u5 p
    22.         y = -39,/ R: V( L! f! B+ R) e\" C9 a
    23.         while{  y < 39,% k$ @+ M% H6 \5 Z2 h: u
    24.                 printff("\r\n"),
      5 e0 d( m! S  ^( k
    25.                 x = -39,3 D+ v4 K: D$ i) \. `
    26.                 while{  x < 39,  _, ]. |4 W6 O\" j$ n9 t\" q
    27.                         i = mandelbrot(x/40.0, y/40.0),3 l' k/ U: A; ]
    28.                         which{        i==0,
      $ R. j( x' t2 f2 ]$ _
    29.                                 printff("*"),
      4 \2 e% _6 v, G2 _8 O0 \( R0 B
    30.                                 printff(" ")4 Q4 v; z2 O8 B! c7 U! [& M3 w
    31.                         },% v! q# W- C- \
    32.                         x++
      ; p3 D- b) K: }% I
    33.                 },
      6 b( ^+ a# M% q0 b! W, b8 J
    34.                 y++
      0 Y2 d' I4 k1 ]- O6 h
    35.         },. W) F% T+ I! o% m4 u
    36.         now=sys::clock(),
      0 C  N: l7 X) }! L
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)
      . B. F, @# V0 g8 k( A
    38. };
      6 a' s3 ^! v/ w6 z' I0 o. l
    复制代码
    . h2 L# d" c- V0 m: }
    运行结果:
    . P3 A: S' b1 @9 C8 W+ Q
    1.                                        *
      # u3 X8 I! f5 w9 @- l& ]
    2.                                        *
      9 |3 ^/ j8 Q( [! }/ C& r  s
    3.                                        *+ x- a/ U* F# k' y2 ?
    4.                                        *
      $ t# j  v- i2 r: S4 \. j; t2 E
    5.                                        *
      2 p. S& T/ l& O' x0 O
    6.                                       ***/ k2 ^! l. G  e
    7.                                      *****
        x7 z3 X% C4 z6 K- Y6 N$ a
    8.                                      *****7 x7 u8 C  Q0 R' J6 j7 M: G
    9.                                       ***% [% N9 T+ m! `8 M/ O( }
    10.                                        *' L5 j, R1 g: j5 D9 m
    11.                                    *********& y9 Z/ ?; e! Q* y
    12.                                  *************
      % E\" f, V& ?+ X
    13.                                 ***************
      % W* G/ N8 o\" m4 w1 ?/ T7 @4 o\" [
    14.                              *********************
      # s$ t. [% Q3 ], F\" Q6 R+ o
    15.                              *********************2 Q* k1 q9 p9 _* x6 o\" x3 z% X1 H/ n
    16.                               *******************& m8 i2 T5 {0 Y* W9 T
    17.                               *******************
      * I; T' G1 K8 _7 i
    18.                               *******************
      9 x, D! B/ F# D1 Y8 I
    19.                               *******************! Y; l/ {% v8 {4 Z
    20.                             ***********************# C* e) Z: q0 m0 r* D
    21.                               *******************: p3 w8 x$ t. s1 f+ m& s
    22.                               *******************' ]; [% I0 Q# f0 n( K; t! i
    23.                              *********************2 f! I/ r\" V1 v% l# D) i3 j
    24.                               *******************
      0 d' ]! X8 i# A( r
    25.                               *******************; v1 j. w: v; F
    26.                                *****************$ D* f, C# r7 {2 V
    27.                                 ***************
      * v2 W' s\" f3 e\" N& ~9 [
    28.                                  *************8 i2 c# g3 M0 H& d8 J5 i# W7 q! b/ h
    29.                                    *********
      $ C* r% i( X; a
    30.                                        *+ k/ o) Q7 b7 L$ h
    31.                                 ***************8 i4 V% s% P0 L4 Y' X
    32.                             ***********************
      2 c0 O9 L5 b, j  v6 P/ H4 S
    33.                          * ************************* *# W  y* T+ g: C! v. r: ?, N
    34.                          *****************************
      / Z, e  j  |, z  h  q
    35.                       * ******************************* *- s. F6 s  T! u\" k
    36.                        *********************************
      $ L1 T# A  y! b6 s
    37.                       ***********************************' x3 l  n8 R1 R- h+ i9 D0 e7 q
    38.                     ***************************************( H& M' M: m) l) O\" t9 j& M% p
    39.                *** ***************************************** ***1 N) D0 }; H( {\" S
    40.                ************************************************** J$ _( y5 X  b7 Y$ Q( e5 A9 J$ r
    41.                 ***********************************************. T5 ^' T  \, M* M% z
    42.                  *********************************************2 d' E0 l, h! {) T& ^: o) Z( O
    43.                  *********************************************
      ) L, |. {  K* H: l* I
    44.                 ***********************************************
      $ Q1 A6 p$ F+ M/ }
    45.                 ***********************************************
      # T* v\" m6 [4 m: L1 g
    46.               ***************************************************
      7 w0 l$ Y+ ?. z
    47.                *************************************************
      # Z- \1 _8 t9 D9 {& |. J
    48.                *************************************************
      , i+ P3 W) c, v; N+ y\" Z3 N\" j
    49.               ***************************************************
      4 X# h; `! q! m
    50.               ***************************************************5 N: p8 |0 p- Z# _8 c4 M; P
    51.          *    ***************************************************    *
      % G& k* W9 Y# v# J
    52.        *****  ***************************************************  *****
      % ?: P& K/ N* S9 m
    53.        ****** *************************************************** ******% |3 Z6 G% U; N  _6 r, X7 x- d
    54.       ******* *************************************************** *******# c9 A& h2 \/ K0 x# z2 ^: f$ w: e- Z
    55.     ***********************************************************************+ z3 C# w9 g/ H. n\" G2 i. ~. _
    56.     ********* *************************************************** *********
      8 t* l7 M( F: k0 x7 `
    57.        ****** *************************************************** ******
      $ t. S3 |- J2 X* l9 K% T! c3 E
    58.        *****  ***************************************************  *****' Z! L\" A, c6 F  _
    59.               ***************************************************
        s* g0 I0 v2 C+ f. x6 S
    60.               ***************************************************( R. R( o1 ]2 U2 Q* r. O
    61.               ***************************************************
      6 \. {% N! n; F. T\" b6 R; e
    62.               ***************************************************/ U7 t1 [* r- C
    63.                *************************************************
      5 Y3 O! H  A, N\" X$ H
    64.                *************************************************
      ( Y9 P$ [; M% G# r# q
    65.               ***************************************************\" f/ j) Z% g\" ~
    66.                 ***********************************************
      3 f% V1 C1 a( T5 Q; Z2 e0 _4 L8 q
    67.                 ***********************************************  O  ^9 ?9 L+ b. h1 v4 F3 y0 v% S
    68.                   *******************************************
      5 S% P1 I- J5 k$ [( F3 ?
    69.                    *****************************************
      7 ~2 I9 }9 q+ L4 y2 h0 `! a1 M
    70.                  *********************************************
      ' m# `7 h0 j# ~! c9 L6 g
    71.                 **** ****************** ****************** ****
      \" y1 M% G) L- I* u- l$ k( E4 }$ \
    72.                  ***  ****************   ****************  ***) {& x: n* {. m
    73.                   *    **************     **************    *
      \" }4 F0 K7 P( w4 q# b- ]0 O, g
    74.                          ***********       ***********
      # y' Z$ U6 K/ {
    75.                          **  *****           *****  *** S7 W5 E# q3 T, s  `6 Z
    76.                           *   *                 *   *9 @& Y. [  p8 J* X+ D4 x
    复制代码

    6 D" \0 g, H" O6 q- v运行时间为:
    8 N+ t7 C) W/ x& Q% f; T
      ]; {1 N% W$ X/ x        Forcal Elapsed 1.078
    ; {- [6 c8 F3 o/ |. c
    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-10-26 06:14 , Processed in 0.374964 second(s), 52 queries .

    回顶部