QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3214|回复: 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的扩充性能更好。
    % r/ @8 e% h$ H, }( N# x在大量函数调用时,Forcal更具速度优势。3 R! Z" I( e, t& b+ C; d5 U
    以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。$ \6 q8 i( A& g$ |+ K' J! o7 X

    2 A. r$ M: v7 u例1:Fibonacci递归程序(n取40)
    : t1 P( }1 A+ @( I
    1. SetRealStackMax(1000);
      + Q' }3 i% G6 o0 E0 R- o3 |# ^* r
    2. F(n)= which{
      ' R- S. H$ a6 p4 h- d( f  X) `2 q
    3.         n == 0,: I0 c& ~2 D; D$ `, c9 \8 i* [8 s
    4.                 return(0),2 E; D. w# U4 {  C2 n2 i- `7 {9 t
    5.         n == 1,9 n$ o7 N1 ^, J9 E! `\" c
    6.                 return(1),7 ]/ K! N; i1 k  k# N\" |, y; b
    7.         return [F(n - 1) + F(n - 2)]
      \" x\" l7 [5 e' I, A7 u1 Q
    8. };; f' I- p; H4 `) R& Y
    9. main(:t,n)=
      6 m\" E3 f( E! C0 C, M  {
    10. {
      & |) @4 W/ B/ _
    11.         t=sys::clock(),
      * M9 |; U+ k( q( W
    12.         n=F(40),* B8 t5 M5 X8 J$ e3 L. C2 a
    13.         t=sys::clock()-t,/ v7 ]$ D/ q) ?. z
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}
      . j$ J( d. T7 G2 o' u# B
    15. }; * L% s, v9 p; y3 V; F
    复制代码
    结果:
    ( L! O. n) O% P$ x- Z# s+ {5 M+ [2 G5 C
    fibonacci=102334155, fibonacci_Time=41859毫秒=41秒
    ) c1 D" E9 q) w. s; G! ~/ V( F8 L, L6 e$ p
    例2:八皇后问题5 k/ x7 A+ E6 i* _* D2 z
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。
        e' T6 |/ X/ ~( u7 b( y$ Z) F* Q
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。8 H) m. I0 s4 P8 Q\" g+ m/ Y  {
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。) L: n6 K2 H+ \, T9 Q# t7 M
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。
      , N. j3 v' }7 m! O' L! s$ |. u: N
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。
      ( M/ `\" y  w; [- m! c, ]
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。! r5 @4 m) e& b
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。\" L  ?2 i$ e- n/ D5 D! G/ y
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
      + A6 c' ]. p; v! s$ _6 r2 y& [8 h, i/ ?6 ]
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。 $ C- R8 B\" z' q! l& d3 M3 B
    10. //Forcal源程序
      * _0 F1 E5 P  C' c/ d1 z
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);& O- y: \5 a* n9 w! T! N  x2 u
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=
      # \4 ~7 z! |7 f3 Q9 W' O# D
    13. {\" t' |8 T. {+ X  s1 k
    14.     which7 P5 r/ P: n  X( r
    15.     {   row != upperlim,
      ; j  [  j2 b, N6 x6 W* N4 j. {
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},% l5 _0 g8 q7 b- G+ v. y4 ]
    17.             while{ pos,4 |5 y$ p& H- t
    18.                 p = and(pos,-pos),9 z* ^% a, a/ _- a
    19.                 pos = pos -p,
      9 I* H\" p+ t+ Q4 j& V6 t+ u! h1 x
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))\" z! Y9 i4 i2 ~/ i  v+ }
    21.             }
      , ~2 |( j! c( _  ~2 \1 }
    22.         },
      $ Q7 w: j1 U1 I9 O& j
    23.         sum++
      ) c& [\" l& @3 ?- \
    24.     }
      / F- p5 E2 X3 R# U
    25. };
      4 v1 v7 ?$ X% \$ Z0 z2 D# w/ X
    26. i:main(:tm,n:sum,upperlim)=  x4 v6 j5 s/ `' m% ^( [
    27. {\" c6 i7 \  C; n# h4 o0 P
    28.     n=15,
      8 H  C4 f! `6 ?! g# X5 ]
    29.     tm=sys::clock(),, t1 m\" Y$ y# D& T. Q
    30.     printff("Queens:{1,i}, ",n),8 _1 W7 G( S! e5 k# L9 X
    31.     upperlim=shl(upperlim,n)-1,
      2 L7 z) b- r+ f\" M- J
    32.     test(0,0,0),3 u* i# b! M8 A5 `7 W
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)3 `* d$ r/ E\" s9 a1 d
    34. };
      5 f$ ^  U6 A; X0 |* E
    复制代码
    Forcal运行结果:
      U0 U" O" L8 [  t& ?
    ' H8 _$ s, C: w5 G7 j) `    Queens:15, sum:2279184, 59547毫秒.( P& y$ B$ v& a& A- a+ u2 |
    . U+ j+ t* o5 R1 g2 i( L
    例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右" O* P6 A1 N0 m$ E/ f+ V4 D
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =
      ) a$ P% M2 M  Q  j% ]  f
    2. {# V+ M( b1 [7 g' x/ \
    3.         cr = y - 0.5,
      + C# i/ ]: s$ _# S
    4.         ci = x,$ [& i\" w+ \8 b9 d9 a$ K' Q
    5.         zi = 0.0,% H6 r) r. f6 f4 z. s- t
    6.         zr = 0.0,
      . D, r! }1 |\" i3 N
    7.         i = 0,
      1 r) g  Z- w6 [5 P
    8.         (1).while {+ c) E\" u/ f0 A& v5 U; \  L7 N
    9.                 i ++,
      $ w; g6 n( K9 i6 k& s
    10.                 temp = zr * zi,; K7 M# u: j& c0 y) _0 y8 D
    11.                 zr2 = zr * zr,' I/ T3 S) Z9 j) G
    12.                 zi2 = zi * zi,
      , {+ s7 W- r( R, B$ U  q: k6 K
    13.                 zr = zr2 - zi2 + cr,% s+ |\" I; t/ @% Z
    14.                 zi = temp + temp + ci,
        J7 [3 |/ O, e! _6 J& u; c0 G1 Y
    15.                 if [zi2 + zr2 > 16, return (i)],
      ' a, h  u, O9 c* ?# T
    16.                 if [i > 1000, return (0)]6 b, a& k0 T% F; S; x* J8 e  o2 y$ D
    17.         }
      1 ?+ U7 ?+ j  v9 g4 }- L6 M
    18.         5 T% k0 m0 t5 U$ I3 r
    19. };8 U& I. x+ G( l3 ~2 J! \- ]
    20. main (:i,x,y,old,now) = {% U* O3 |* b, I\" J$ E- p  ^
    21.         old=sys::clock(),  }\" o) P' O: ~3 S8 `: A, d- P
    22.         y = -39,
      6 @4 u9 Y1 l; ~
    23.         while{  y < 39,
      8 @6 h9 Z, z! _# [2 b1 j; k( L
    24.                 printff("\r\n"),) g& ?. g$ f8 X& @. h+ @) k7 U
    25.                 x = -39,
      ) _7 [2 t, O: X7 D
    26.                 while{  x < 39,' `1 K1 x/ l- f' y
    27.                         i = mandelbrot(x/40.0, y/40.0),
      7 t- z2 O# w; n! `7 x( d
    28.                         which{        i==0,
      9 O8 j. x2 ?, W* c1 q* q
    29.                                 printff("*"),, s5 r* \$ K2 K. S
    30.                                 printff(" "), X- X( f) [: T: M\" z8 {
    31.                         },
      ! H4 F3 ?  P7 G3 M& t* u6 A
    32.                         x++  ]5 i) ~* m9 {+ E/ y: C
    33.                 },% `% Q\" M! q1 I/ y$ U. S- c: j4 H$ L% q' Y
    34.                 y++
        h  k1 }2 z: J
    35.         },
      ; C- A. ?( Y1 |
    36.         now=sys::clock(),
      7 P( @* K5 B3 M\" V4 d
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000): u6 f8 p) y$ J9 U' v0 w% u, x
    38. };
      8 Z% O2 C; |9 P# _
    复制代码
    , Q! s' ]$ W3 b4 R+ l; b* r
    运行结果:9 B9 K5 L* {) t! A) U  t* J4 [$ `
    1.                                        *
      ( X# n& n4 k4 p6 |4 a
    2.                                        *6 S' E5 g- x& @. [2 b( k
    3.                                        *  b, [$ M6 r) a
    4.                                        *
      ' {3 ?$ u: ^: T) u0 J) L
    5.                                        *; `0 w% y( }5 B7 a
    6.                                       ***
      9 I, P( ?3 v- b- o: M2 m\" b
    7.                                      *****
      6 t1 g! k3 j3 P1 }: B# ^6 s% I4 ^
    8.                                      *****9 q5 P' ~0 B  Y. r
    9.                                       ***: S3 L1 k( W! d\" g
    10.                                        *1 }: j# B3 R; W  {8 x* b
    11.                                    *********
      0 V2 {9 A! b/ M# [; L' K: ~, ^
    12.                                  *************! {# y0 W5 R2 `  U9 T: {
    13.                                 ***************
      7 N1 a; E* _2 I6 {# D8 H6 E- U  S
    14.                              *********************# M1 R: D# d1 B! h
    15.                              *********************
      $ h7 c, E* s+ A3 w6 b\" I, @
    16.                               *******************
      4 [. X7 n, V  N3 h! O5 A0 I
    17.                               *******************9 V4 r( |1 n$ v) L6 p, M
    18.                               *******************
      8 M! D3 f7 H: X' @- G$ o
    19.                               *******************
      5 x0 ~* u6 |' a! V+ n/ k
    20.                             ***********************& T9 ]0 j0 |5 R8 f( }/ D  i
    21.                               *******************5 o6 |$ e  q# B5 Q, b
    22.                               *******************, i7 c( i2 s# g) I% E
    23.                              *********************% `: k% l0 M. w# K8 U
    24.                               *******************
      # G1 r- ]! [1 W: ^! a% c
    25.                               *******************\" z7 H  ~- }- e: T
    26.                                *****************/ I6 m, ?5 G. G\" n- o/ _
    27.                                 **************** l0 |) I. \5 Y: r+ s\" ]& g\" S
    28.                                  *************
      + Y, q! R1 c4 }9 l\" ~9 S  L
    29.                                    *********
      8 B& @- h$ @3 |8 v. X
    30.                                        *) A6 }! r% A) U9 X7 }
    31.                                 **************** p  V! W3 V3 h8 Q) d# t& c
    32.                             ***********************
      . d  [9 F: ^4 j6 c* t
    33.                          * ************************* *
      4 Y  _6 c/ \% O4 f) h
    34.                          *****************************( V/ e$ p9 Y1 B1 w\" A& T
    35.                       * ******************************* *
      : b9 L1 B) U: P2 F
    36.                        *********************************
      4 @\" `/ {\" ]0 a4 m
    37.                       ***********************************
      ( r& k' O0 x5 J' T, s+ N
    38.                     ***************************************
      7 i( |6 y* [4 `( j+ i, O
    39.                *** ***************************************** ***7 K! y# J( Z6 l2 t8 `
    40.                *************************************************% h6 N\" ^+ B# `4 E5 Z+ P
    41.                 ***********************************************1 ?5 g; e\" e9 W: u
    42.                  *********************************************
      - @/ b6 o( p3 T
    43.                  *********************************************3 u8 l. {+ o# {. b# \; a
    44.                 ***********************************************
      : O# y: L5 U+ b$ M& F7 a+ g
    45.                 ***********************************************
      + E! L6 N( F+ H
    46.               ***************************************************
      4 [0 n3 @, |! f. m- [$ P4 m
    47.                *************************************************( Z- D; @! [& m& f( g2 X* d/ x
    48.                *************************************************\" h. l0 u' j+ t$ n% c
    49.               ***************************************************- e: p: O% }. ]\" d9 x; S+ f
    50.               ***************************************************$ z2 N) T* |2 O& r% K% e' j5 B
    51.          *    ***************************************************    *
      6 R1 z; w' z2 O& d+ }
    52.        *****  ***************************************************  *****) r5 Y5 d, g\" A0 S
    53.        ****** *************************************************** ******
      * L4 ]5 ^# Z; n! b6 f) v. A
    54.       ******* *************************************************** *******1 K  {, q& \8 ?- f5 F
    55.     ***********************************************************************
      ! Q% Z% K+ l1 `+ T2 p9 Q
    56.     ********* *************************************************** *********
      ! Y: \2 g# `! v1 _3 K7 A
    57.        ****** *************************************************** ******* Z1 w8 W8 r# ], a/ i/ s( p
    58.        *****  ***************************************************  *****- [4 C5 W9 \) o  J
    59.               ***************************************************
      4 M# K, I! `) W  r- Z$ i- X
    60.               ***************************************************  G' x# M3 @. j& p# l0 G
    61.               ***************************************************( W( d0 }0 m: p8 Q8 M% P( A+ }
    62.               ***************************************************
      8 P0 e' i; g  c! n+ k% r+ O\" `
    63.                *************************************************
      # o1 q- Z0 [* c+ g7 y4 h
    64.                *************************************************
      3 k2 O8 g$ H6 f0 J: E\" A1 k: I
    65.               ***************************************************
      8 |- O. G! g: x1 L
    66.                 ***********************************************
      / c$ j% \* B7 `/ r/ @( G0 P/ c
    67.                 ***********************************************: g- z6 F7 s) u: p  U, y
    68.                   *******************************************
      , _$ n$ W: d; X/ z# h2 j5 o
    69.                    *****************************************& u* }; @1 K; d+ t1 `8 Z
    70.                  *********************************************
        ], |) Z# l& ?: e5 W# L
    71.                 **** ****************** ****************** ****
      + F/ P) U' I9 u+ i( m7 s
    72.                  ***  ****************   ****************  ***
      & D- d/ w/ H' J4 k* T. v  v' B
    73.                   *    **************     **************    *$ Z3 U& X6 @8 ^# G2 E/ o6 L( M
    74.                          ***********       ***********2 W6 m1 ?6 t& H7 w1 W3 R. v, D
    75.                          **  *****           *****  **3 ~2 V+ g, w: ^) ^! T
    76.                           *   *                 *   *
      * d( I0 `  [; M/ m
    复制代码

      L1 d+ b2 u% R, a5 H% ^运行时间为:
    - d% \5 K& @" {7 o9 j
    8 k9 f  w0 l* Y$ M. r3 J8 G        Forcal Elapsed 1.078
    5 C# P! k. l& a# 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-4-18 15:05 , Processed in 0.413374 second(s), 51 queries .

    回顶部