QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3293|回复: 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的扩充性能更好。
    0 q$ v4 ]. v0 C6 X在大量函数调用时,Forcal更具速度优势。4 B& n" [. ~9 B- x- N
    以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。
    # F) m! T: Y# f& t: O  z
    3 ~4 Y! E- [1 M0 i: J8 ^例1:Fibonacci递归程序(n取40): u9 w4 T: N- d8 n2 o' b
    1. SetRealStackMax(1000);
      : G+ u5 c5 R2 T
    2. F(n)= which{# n) n0 Z; s\" c  S1 ~) p, w
    3.         n == 0,
      ( K3 o, `. X! o: F+ R% s
    4.                 return(0),
      3 f3 O4 i4 H! D
    5.         n == 1,8 @( ?+ N2 M( {7 b' e
    6.                 return(1),\" `; [2 x3 z, o8 a+ H\" _. G5 V' }
    7.         return [F(n - 1) + F(n - 2)]0 d  R: `4 A' u! h0 }2 d
    8. };2 G, h+ `$ s: x& E( S8 f# k
    9. main(:t,n)=. h6 C; M. h9 F. l& y
    10. {+ l: ]8 G8 v/ q& {) x
    11.         t=sys::clock(),  m$ d% r5 a: G0 m3 d; r1 Z( t0 ]
    12.         n=F(40),& @' o5 H4 c6 |1 m\" ?
    13.         t=sys::clock()-t,# V4 _( K7 V. z7 R/ _* v5 H
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}( p: k4 c, a$ `4 Z  T8 h
    15. };
      # C& g# \! Q4 M5 c3 \5 m( R# S
    复制代码
    结果:% r6 E; J$ L  H' H% X5 F9 y- d

      R3 }% L) z% q! `0 Pfibonacci=102334155, fibonacci_Time=41859毫秒=41秒
    + M4 R( N& o2 b- G
      P4 K) h5 i3 O: S, V9 l例2:八皇后问题' I+ \5 t0 _. e& X
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。! G8 `# m9 a0 U1 o0 u0 Y1 ^! u
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。' h/ O' ?* v; s& A
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。0 i0 U) p& i# f. Q- G) w- V) N
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。
      : f* s6 a3 E0 P& T* f
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。
      & Y1 E& n' n2 o% E' `\" j/ Y9 B6 |
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。8 ]8 }. i1 R0 |& M+ S% D, u% [
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。- }2 i8 s+ Z+ [4 U6 L
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
      : |+ n9 p9 l6 E
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。   y5 o. ?, q/ I; E. e( f1 R
    10. //Forcal源程序
      2 `, U/ K8 }, [: l# p
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);
      1 u! n+ p% Q# l' c$ y
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=6 F1 V6 z7 X& B6 f
    13. {* d6 R% s+ z! T9 L4 w7 y3 |, D
    14.     which! b( [3 o5 S- c& h* q' ~3 b
    15.     {   row != upperlim,9 ]# H8 U6 D/ q/ K
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},
      ( R* Y/ p( [( C% w* l9 Q+ p  F
    17.             while{ pos,
      0 B3 W, g8 M! ~' R
    18.                 p = and(pos,-pos),
        j8 y0 Z' v* y( b; e\" s
    19.                 pos = pos -p,
      ( Y4 c6 k3 a2 m& _6 k
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))
      / K9 I& N8 i0 H: j) K: j
    21.             }
      , E4 }6 |4 d$ M\" c3 P% @
    22.         },
      & V  {4 q2 H, Z$ v
    23.         sum++5 V6 ]6 [+ k2 p* Q' Q  E, X
    24.     }
      / K* L5 X+ y  t6 n: w# Y) s$ B9 k- ?
    25. };5 ]9 J) S( h) T\" l- l% Y9 B! z( d* |
    26. i:main(:tm,n:sum,upperlim)=
      $ b. ?* E, d' R
    27. {- d+ s8 F. z, {7 n# {- M8 J+ [
    28.     n=15,. C3 G* ]0 i# ]; E+ B
    29.     tm=sys::clock(),5 l8 K! }8 a$ K9 W( q
    30.     printff("Queens:{1,i}, ",n),* ?8 n6 B* ?, l3 `; X
    31.     upperlim=shl(upperlim,n)-1,5 g( I) m0 G+ g) `( p
    32.     test(0,0,0),\" q2 }- D' V0 v1 \; T
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)
      6 C0 U/ h' N  _9 a\" W. v
    34. };
      & l- l8 D# ]6 R5 R: W
    复制代码
    Forcal运行结果:' P' ]8 \1 `& w
    - T2 c  T, t0 k) {0 B
        Queens:15, sum:2279184, 59547毫秒.
    , b; f3 K; q/ j8 F, r1 I. [+ L; ]' Z) [2 B9 b3 `" @- Z
    例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右5 O) \: U5 p6 _6 ]% i" I8 ^% ?
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =! y\" P\" V4 d; \
    2. {8 F- d\" E7 z; e8 {7 [
    3.         cr = y - 0.5,
      / E' x0 n+ J; t0 J, A
    4.         ci = x,' N& G$ P1 D; o# @, D9 c% l
    5.         zi = 0.0,
      2 ~* d\" ?- S- Z' _& l/ Z# s( C% J
    6.         zr = 0.0,
      $ q$ L# e5 R9 F5 s+ @. v; ]
    7.         i = 0,
      : G3 [6 @3 t1 X
    8.         (1).while {' X0 n3 g* O, D
    9.                 i ++,
      ( v7 I' @9 I- s
    10.                 temp = zr * zi,
      * s% a5 X\" C: V. s
    11.                 zr2 = zr * zr,. E$ V% n& G8 Y: O$ t
    12.                 zi2 = zi * zi,
      ' Z3 w, l2 A+ H4 o, u
    13.                 zr = zr2 - zi2 + cr,
      4 i) M, ]! r' ~$ T& }7 _  ]
    14.                 zi = temp + temp + ci,
      + |% B' Y: b+ k/ T( Y
    15.                 if [zi2 + zr2 > 16, return (i)],7 d( L9 T\" M. Q4 J9 @) `
    16.                 if [i > 1000, return (0)]3 L% s, Y0 x: K0 D4 |% D. l
    17.         }
      0 |; Z3 V# a# o8 ?7 A
    18.         
      : F/ M1 X$ w8 K' O. ]
    19. };& \7 \  @% \7 y- I( m
    20. main (:i,x,y,old,now) = {! c/ O  G4 N2 Y0 o8 \, d
    21.         old=sys::clock(),' k\" v: T0 d% M& ]9 A$ P
    22.         y = -39,. g! b: i6 N$ p; W4 m  B
    23.         while{  y < 39,
      ' j4 }0 @! C  I0 O: x$ N
    24.                 printff("\r\n"),
      ) q. }+ @9 A\" ^% T, L; e
    25.                 x = -39,9 d+ H$ _- {/ Y2 o% I2 g4 v, T+ m3 y! ^
    26.                 while{  x < 39,
      * A! Q5 n\" W& o( E
    27.                         i = mandelbrot(x/40.0, y/40.0),9 y5 e8 n; Z4 K
    28.                         which{        i==0,  Y$ X+ ^  g6 `5 r5 B& K
    29.                                 printff("*"),
      6 H. I) n2 [( P  L
    30.                                 printff(" ")
      2 E. |- v/ K% ~3 E' \2 r! x4 [& m% k
    31.                         },
        v' r& R' U/ D  k, ~( N
    32.                         x++$ n; e6 q! f( p# h. r0 X! z
    33.                 },
      . @- Q, p: l: ~, ?' N& I
    34.                 y++
      # D6 \6 G* l. e- w5 C. W
    35.         },
      , [; z0 i1 P  r: M2 W: t% J) A8 t
    36.         now=sys::clock(),
      \" ^\" }# Z\" l3 L# o+ l& k
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)
      ' G: o; d  A5 X1 a+ j
    38. };
      ! I- c8 ]0 {0 N8 n* N* Q
    复制代码

    9 [+ h( v; q2 t8 n1 n9 M( d3 {4 z运行结果:
    ( U! s0 D/ _' g$ b
    1.                                        *
      8 J2 I3 ?$ f! e: f\" n
    2.                                        *; t; w: I# }* `8 {\" t- y( t/ W
    3.                                        *9 K7 y2 R4 V: P  O+ q* ]3 E
    4.                                        *
      ( o; Y) d4 R6 F2 W$ Z
    5.                                        *
      ; Y- {8 i' ]; ?
    6.                                       ***1 b; }. r. H( C, Q
    7.                                      *****# ~0 q. Z' r  p, \+ G5 }/ |
    8.                                      *****; G+ v9 c. h\" Z, g$ A5 |
    9.                                       ***3 O4 f! n3 T- g8 |. Q
    10.                                        *2 a- \. d) B) m! L% l# l
    11.                                    *********4 j# {8 M+ C: ^5 T( H5 m% u
    12.                                  *************/ J- S5 y2 r6 `0 i. R' L
    13.                                 ***************& q/ v9 ?) J\" e8 I1 Q7 w# Z' z* W
    14.                              *********************
      0 N. t# N1 w+ t  Q\" N
    15.                              *********************- H1 D& D& `! z3 d) a6 G
    16.                               *******************! R; A+ y6 C! M  R5 |$ |
    17.                               *******************
      ) K\" P: |' C* O0 A5 Q8 f/ h) b
    18.                               *******************# d: m' A! o! m; H, N+ }; p  R
    19.                               *******************
      3 U! M, B1 E7 `
    20.                             ***********************
      + {. ?) B: F; w7 a
    21.                               *******************+ w\" N  E: i3 A7 y3 x: s4 [. F: @9 r* M
    22.                               *******************6 ]0 v! N; x, C; t$ w
    23.                              *********************
      ) S1 c* A\" U  L, e
    24.                               *******************! ~7 b! y( F9 A3 q' J# z
    25.                               *******************
      2 }\" k2 V5 s* R8 Y5 L$ f; z8 X
    26.                                *****************$ t2 Q  v\" k; j/ @) R! o
    27.                                 ***************
      , }# @+ l0 W1 n% N- h3 t9 J/ C; Q
    28.                                  *************
      1 V& T- U' `, [  @, L7 }
    29.                                    *********
      ! _# O3 x2 Y, p\" F& R5 S
    30.                                        *
      \" Y* W1 R8 r0 K7 B, @
    31.                                 ***************
      7 \$ h* H) G( V6 Q1 c
    32.                             ***********************
      & J6 i, h9 o8 I$ x6 x
    33.                          * ************************* *
      3 m: H  t/ p$ A* {/ Y& V2 \( i
    34.                          *****************************
      * `/ z6 z/ x& g/ I- {2 T* P4 C
    35.                       * ******************************* *
      3 R  p' a. I0 O( K
    36.                        *********************************
      0 u1 B9 d/ ^\" B% C
    37.                       ***********************************
      , [; i' ~/ F' u7 }- b
    38.                     ***************************************
      ' i& |0 k9 D; b7 R9 J
    39.                *** ***************************************** ***- h. y0 s' }$ o3 T. U
    40.                *************************************************% o, F; [' e9 V% N) o* O, l  U
    41.                 ***********************************************
      5 }* r; N) D2 H
    42.                  *********************************************
      , Q3 e3 u& V; S5 ^  M( T
    43.                  *********************************************% |8 D( F$ A; x* n
    44.                 ***********************************************1 d: `* Z8 a6 n! Y
    45.                 ***********************************************
      * r3 Q! [# g/ z3 n
    46.               ***************************************************2 A5 |( `# ?: X2 Z- C. G
    47.                *************************************************
      * l0 _1 L9 G2 u( @+ D4 Q
    48.                *************************************************# u/ J6 [+ c\" g
    49.               ***************************************************& F  X# {. M2 N
    50.               ***************************************************
      . o5 b. M$ P& x, J; k% y( {- K! ^5 F
    51.          *    ***************************************************    *
      8 A& h0 F1 w$ ~
    52.        *****  ***************************************************  *****& ~$ n# B# Y$ g, Q! X' g
    53.        ****** *************************************************** ******
      . ]- W/ _/ O, V$ u' ~! ^! V
    54.       ******* *************************************************** *******7 T2 D) {/ l' F
    55.     ***********************************************************************( r# ?& k% l/ i- r& [
    56.     ********* *************************************************** *********9 R! L+ R! }; y$ R: W* c
    57.        ****** *************************************************** ******
      $ S\" [5 f8 {; o  V8 _6 h/ [3 i) ?
    58.        *****  ***************************************************  *****% \\" A* Q7 E/ L0 f3 c7 c! @' o$ [
    59.               ***************************************************
        y* C$ p- n5 x
    60.               ***************************************************
      7 S5 ?. U& A. c# l4 f, K1 s) o4 ^
    61.               ***************************************************
      2 n# r5 R9 J* b+ W& _
    62.               ***************************************************
      - \$ n& H# d7 Z\" y' Q; I; V
    63.                *************************************************
        N& L4 G$ I% k6 H5 |\" Y' e+ |
    64.                *************************************************0 |0 m6 G+ M, K/ D1 V) s- P
    65.               ***************************************************6 g/ Q  O1 L9 w# s* E6 M' _
    66.                 ***********************************************
        p3 @: e6 V; Z. L  F0 [
    67.                 ***********************************************
      ) Q0 A9 f# K: U9 g: l; R6 r
    68.                   *******************************************
      8 y# ?4 L# R$ y\" A: Y/ C) E- k8 Z/ w- }
    69.                    *****************************************
      & I, ?. U1 O: m, E
    70.                  *********************************************/ Y! e/ S5 `+ _2 T: D* d& A
    71.                 **** ****************** ****************** ****, t! s& Y: w- Q
    72.                  ***  ****************   ****************  ***
      0 b$ k  \$ Y8 d0 l7 [
    73.                   *    **************     **************    *
      $ }6 e% L+ u9 }2 [7 S8 v; y. ^2 w
    74.                          ***********       ***********
      : y; [( p% w+ y3 y; V/ L
    75.                          **  *****           *****  **! P# m& g: A2 [2 g
    76.                           *   *                 *   *9 U4 j2 ]* d4 ^8 O6 M4 @
    复制代码
    6 n# L8 J3 p' s1 P' |$ g! o5 g
    运行时间为:
    8 a$ z5 E& J& n2 {
    4 O; p0 o8 r$ s) X! C- P        Forcal Elapsed 1.0780 F3 [1 W0 i8 P! S4 A0 ]
    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-9-1 15:11 , Processed in 0.310296 second(s), 51 queries .

    回顶部