QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3288|回复: 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的扩充性能更好。8 ~9 x1 H. z8 x# u7 }2 f
    在大量函数调用时,Forcal更具速度优势。# |; a- f6 ^3 F* X6 T
    以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。
    / _% e' g0 X# k. J! @1 v# U4 N2 a& r; ]4 `# ~
    例1:Fibonacci递归程序(n取40)
    3 [5 }" C0 T* i/ W* y4 E
    1. SetRealStackMax(1000);! I9 s( G( o! q8 R
    2. F(n)= which{- J/ t5 W4 X% j  Z9 _5 h; t5 c
    3.         n == 0,
      + J, O9 D4 @( p: N% O\" N
    4.                 return(0),
      . N\" M9 U' m' e+ l/ d7 o0 Q
    5.         n == 1,5 c$ k  ~$ c, V2 g3 q1 E8 k. z$ S
    6.                 return(1),
      # f+ L% z9 @$ `
    7.         return [F(n - 1) + F(n - 2)]
      . q4 S+ V# i0 `* M0 P0 p
    8. };% t; V1 e% R1 r$ u
    9. main(:t,n)=5 r( P5 n3 ]6 Y, {
    10. {0 Z9 F! |; d; V
    11.         t=sys::clock(),, M0 t7 u0 j- w& Q+ Q/ s
    12.         n=F(40),
      : y  @\" A; b2 w9 @$ F# a3 v
    13.         t=sys::clock()-t,/ D; n\" ]3 M. W5 w2 F/ i6 x: [
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}
        P& s8 {7 ~\" @5 \+ c\" d
    15. };
      0 c0 ?7 u& t, F) T- q
    复制代码
    结果:& f' ^- @3 ?1 U
    6 a  m" V" r. ?/ W; T9 `' k+ b
    fibonacci=102334155, fibonacci_Time=41859毫秒=41秒
    5 B2 d; B. K3 W6 i, _" e8 m9 |1 c/ J) S! J7 N( S  D7 e( ]
    例2:八皇后问题
    0 b/ i- W3 ~/ I2 @9 z2 U
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。* I0 @$ I- x. a, T* H8 v5 H& S3 Q
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。
      ( W. W2 C. S% A0 O' q
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。! ~\" L4 U4 z: C: g
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。# h\" ~, Q2 e& P6 _& K
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。
      ) c0 q3 g& H! i2 ~' [$ I/ m
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。7 t8 n) O! I3 d/ u
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
      1 Z* S* ]/ M\" F2 y
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。' @9 u6 f% p- S! z
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。 ! G4 i1 m) H$ D
    10. //Forcal源程序
      6 i( H1 X9 s. w7 x6 Y( O/ V2 a! H
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);5 z/ l3 u  F* `7 z9 O
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=
      / K0 t7 _  U6 P7 m
    13. {
      4 i& u\" e1 R4 Y; `; v
    14.     which& s  ~+ Y7 l) F: r
    15.     {   row != upperlim,+ k5 U2 e) B+ w* G. q5 @
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},
      + v9 r: [2 |3 X% t: h- ?
    17.             while{ pos,4 E8 D+ c2 u3 @+ Q4 ?7 n( _( A
    18.                 p = and(pos,-pos),
      ; k* G9 v  M+ {! i; g% `. v
    19.                 pos = pos -p,, V2 j, f, }0 Y7 i% e; N0 d1 ^& l
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))
      $ p  L2 \( B* t
    21.             }. P1 p' z) k6 F4 F\" M- e1 v
    22.         },3 I' V' F4 p4 H6 ~0 {7 x  n! b
    23.         sum++5 F) b6 @( n* |4 a( ?$ ^
    24.     }
      ' k1 H3 i# @$ h$ b! E
    25. };
      ) W, M3 L  R- j
    26. i:main(:tm,n:sum,upperlim)=
      9 J; U1 ^7 @4 _5 n; G# x
    27. {0 ~3 O% b) Z( C; W) Y& F
    28.     n=15,5 }4 c9 _# i' R+ K+ j\" P* A
    29.     tm=sys::clock(),' \4 B8 f3 |1 @
    30.     printff("Queens:{1,i}, ",n),9 Z) Y0 M, E. e% [9 E. N
    31.     upperlim=shl(upperlim,n)-1,! [6 ]1 ~' j; J5 n
    32.     test(0,0,0),3 `* V0 T- ~. |! v3 K
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm): f; v1 K/ A0 ]7 U
    34. };
      3 o# v1 K7 z) X
    复制代码
    Forcal运行结果:
    . @0 B3 k! ]( r' A
    6 B. }1 l. h$ A; U3 u& S    Queens:15, sum:2279184, 59547毫秒.
    5 F5 P! v- f! M6 U9 E' w* V& Y6 L; X. B) w
    例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右! n0 f8 r: e6 T, q
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =. N4 g( e; b6 d+ t1 \2 Z; O
    2. {
      1 C. v; z7 ~  }6 V1 G
    3.         cr = y - 0.5,& @  o( s9 o+ J  h0 V$ o: X
    4.         ci = x,
      * I0 G7 f9 m1 u\" u! Q
    5.         zi = 0.0,, B4 Y5 u5 I% ~
    6.         zr = 0.0,
      \" X' T/ \+ q- x3 i
    7.         i = 0,
      % E1 t, D/ p1 I0 H\" Z2 a# g* G
    8.         (1).while {$ g( R5 W! ?6 T% F
    9.                 i ++,
      ' E6 V- P  u4 U2 x
    10.                 temp = zr * zi,  I& e3 T0 }) B6 j: D  M' w/ F
    11.                 zr2 = zr * zr,
      - c: G1 M/ N9 j+ U
    12.                 zi2 = zi * zi,
      , E0 ?  c: l2 o4 U
    13.                 zr = zr2 - zi2 + cr,0 [0 [6 `& P+ _: ?  y
    14.                 zi = temp + temp + ci,. G( x% N2 P% B; ]; a. {
    15.                 if [zi2 + zr2 > 16, return (i)],
      1 w6 P2 s7 ?$ S) ]# g
    16.                 if [i > 1000, return (0)]' X: K9 O8 Z% D9 o5 d
    17.         }
      $ M  ?\" v+ k7 c3 S  G4 x+ k\" z
    18.         1 |\" Q3 s7 x. h8 K: O9 W
    19. };
      # b3 f2 W6 h' z; J
    20. main (:i,x,y,old,now) = {
      0 F0 j* B4 R' C, [1 r0 o
    21.         old=sys::clock(),
      , H& A& {. m! i& L
    22.         y = -39,4 O+ i. e\" ]4 B/ m1 ~/ x9 Q% O
    23.         while{  y < 39,$ a( O  n: q* A+ w: e
    24.                 printff("\r\n"),
      ; s7 k2 H% }& m' ?* O
    25.                 x = -39,
      ! W: P5 k! g5 B) p
    26.                 while{  x < 39,
      4 ?! O3 T, u6 Y' U$ J# B8 i) \; v+ @
    27.                         i = mandelbrot(x/40.0, y/40.0),
      $ g  F' Q* Q6 }( Z
    28.                         which{        i==0,% y5 q3 ^8 d$ b9 E- C! K4 H
    29.                                 printff("*"),
      6 G\" z) J. s4 E$ F7 s( i
    30.                                 printff(" ")
      / g  x! W% N% z9 S
    31.                         },
      4 p: c- w  F) k: V1 I  X
    32.                         x++* j9 u% m$ A6 i7 f# L# ^8 g4 m
    33.                 },
      # q: _8 |; F! j- I! D( s$ ?0 K
    34.                 y++3 R$ |+ |( m$ j( r7 H
    35.         },
      0 e9 j+ H4 D' a/ Z0 @
    36.         now=sys::clock(),
      & S( K0 g\" ~9 F\" T  Z
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)2 ?4 e- Z! R; T, r! G
    38. };
      2 o+ \! v% r( a3 l3 h& w  w4 G
    复制代码

    3 \/ w  e! D* z5 |1 j* J运行结果:
    ! m4 [- Q# `8 {7 ^  x  X! j
    1.                                        *
      % J8 L# w+ T7 D- ^\" ~
    2.                                        *
      , @8 k/ \( z: w\" Z5 D1 e
    3.                                        *0 m6 V* m\" |( a
    4.                                        *
      ( T; T7 E. C( q9 Q( |7 N
    5.                                        *6 Y0 {$ h% W9 B- U  l# y
    6.                                       ***\" g0 l$ o# Y! |$ g
    7.                                      *****3 G, s2 T* r4 _
    8.                                      *****
      0 t+ y& u, e3 K7 J& l
    9.                                       ***
      8 Z, L# R$ A: q2 F( c) p
    10.                                        *
      & m\" [- R6 l) ~
    11.                                    *********; k& B+ t9 x+ u3 j. [
    12.                                  *************
      7 W* x4 P4 h+ \7 M6 e& d/ y! l
    13.                                 ***************
      . ?1 C6 a' X5 V1 g9 V5 Z3 U\" z7 r) I
    14.                              *********************7 A& w1 A- z! v- V4 }
    15.                              *********************7 c/ a1 i: `8 t. n# H* t
    16.                               *******************5 m- p8 Y( X\" m
    17.                               *******************
      % a8 B% a) \& M' @/ H/ ]
    18.                               *******************& l; O8 d  h* N' }0 j
    19.                               *******************
      , }3 g\" y/ M$ b; d9 l. S5 f
    20.                             ***********************
      & \+ }' p4 P\" ]& m% f
    21.                               *******************\" b& O: M; ?% }. o, c
    22.                               *******************- K. B\" \3 [  g3 U9 C
    23.                              *********************
      6 O% [\" \3 @& {# J; S$ }4 k
    24.                               *******************
      ( X( v7 W+ {6 a5 T. y
    25.                               *******************
      6 Q3 N9 y+ L0 {( |: _2 m
    26.                                *****************- B. e6 U/ u) t9 `) f2 s2 @% m, O
    27.                                 ***************
      8 V6 L6 x! u\" i+ ^/ r
    28.                                  *************
      4 C$ \, j% F1 S* S- p5 U3 I7 k
    29.                                    *********
      # q\" U9 T* u9 b! P1 m. b  \3 U( B
    30.                                        *# I& L9 g$ j: Q# J4 B* [5 N
    31.                                 ***************; A1 r  W- y\" g0 R& O
    32.                             ***********************
      $ V: o! W2 I- Q
    33.                          * ************************* *
      6 p: T: O( S$ Z& e3 M& {' D3 _9 H
    34.                          *****************************
      \" h3 E3 x  v3 B\" O$ v
    35.                       * ******************************* *
      : `# V! E8 i5 L- ]+ R2 Y! t: ~' k$ W; Z
    36.                        *********************************
      4 a2 ]: T  V  A. [- V5 _3 f( d
    37.                       ***********************************3 @$ ~/ f0 I- y3 k! p
    38.                     ***************************************
      0 ~) t' ?! X- `/ `) _
    39.                *** ***************************************** ***
      3 G' X5 P1 e$ Z1 o& l; ^* j
    40.                *************************************************! ~\" s$ U% j; L2 P; a& ]  J: `5 J4 C
    41.                 ***********************************************
      + ^% W1 C9 b- I& V
    42.                  *********************************************; T: y- h' e6 G
    43.                  *********************************************/ B+ `* H; m3 J$ e% L/ m0 Z
    44.                 ***********************************************
      / u7 J% g\" u3 N# w
    45.                 ***********************************************# A9 Q; `7 |6 b
    46.               ***************************************************5 D7 e0 z; h& h0 z7 |
    47.                *************************************************
      8 H6 P0 b  j( N2 p' P) p/ y9 f
    48.                *************************************************
      ! y' c; f! `7 i& y+ W, j
    49.               ***************************************************4 g: I: K* K( G. g/ h
    50.               ***************************************************2 P# J, ~, {! w& l# e5 b& ]
    51.          *    ***************************************************    *8 f) w* p5 s) Q: A5 T5 O5 H
    52.        *****  ***************************************************  *****1 H\" b$ W8 q, M4 _  |
    53.        ****** *************************************************** ******
      & N0 x5 h0 [\" V: p3 H7 W
    54.       ******* *************************************************** *******9 O4 M% f7 _$ c$ b5 q% R; K
    55.     ***********************************************************************' u  N- U1 @- o
    56.     ********* *************************************************** *********
      ! H6 x3 o\" }* [3 a9 d0 j0 E
    57.        ****** *************************************************** ******- Z3 u. }6 Z# _/ s  S) ?; s! s
    58.        *****  ***************************************************  *****4 U; C* Z1 K2 {8 z, _8 Q) J
    59.               ***************************************************
      5 n' f# g, Y5 N/ c
    60.               ***************************************************
      ' t: B, a' C6 A8 J
    61.               ***************************************************
      ) ]2 ~\" v. x. x5 `
    62.               ***************************************************
      4 y5 B% \* F; E6 \
    63.                *************************************************! F& w9 ~1 B\" N
    64.                *************************************************
      0 p  c) m\" S+ N, @9 g7 Q
    65.               ***************************************************, C' s9 z& V# _2 @
    66.                 ***********************************************
      3 U' w- @1 _$ ~3 S) M9 N* R
    67.                 ***********************************************% r0 [  ]8 G9 e& o- T
    68.                   *******************************************$ O, [. I* q; D8 A* Q; w\" u
    69.                    *****************************************
      & O$ c5 x& P8 T' c
    70.                  *********************************************
      * d: z  D6 E4 z, u3 K* q
    71.                 **** ****************** ****************** ***** G/ X0 f3 {: R
    72.                  ***  ****************   ****************  ***
        r2 [, A\" ^# W7 H( g
    73.                   *    **************     **************    *4 V# }, N. S# K+ z' }# ]
    74.                          ***********       ***********  i3 \# _, h: r
    75.                          **  *****           *****  **8 s; ]4 i) j8 q9 Q: j0 t
    76.                           *   *                 *   *3 A3 t& S. q\" e& u% b! v
    复制代码
    1 s* e+ z1 C3 L6 n' |+ W# j$ A1 g
    运行时间为:
    . n) @5 q3 O! B* c0 s. C) r, Q) |6 E( {( z/ d* E0 H  _2 r" R
            Forcal Elapsed 1.078
    3 n# k# m# P5 W; q
    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 20:50 , Processed in 0.487447 second(s), 52 queries .

    回顶部