数学建模社区-数学中国

标题: Forcal运行速度测试例子 [打印本页]

作者: forcal    时间: 2010-9-27 19:28
标题: Forcal运行速度测试例子
Forcal的运行效率与Lua相当,是目前最快的脚本之一,但Forcal的扩充性能更好。5 I# C$ s! g, N3 j  j! a! l1 `- O
在大量函数调用时,Forcal更具速度优势。
8 E% ~" z* G5 C3 I  K) h6 C以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。" m2 Q; A2 @4 T6 O/ T' b5 F

0 B& q% r- R& T6 m6 a* V# u例1:Fibonacci递归程序(n取40). N! a, n; k3 \
  1. SetRealStackMax(1000);: R" L7 T) p, a& A
  2. F(n)= which{
    ; d# f0 k! b& Y5 O* d% c
  3.         n == 0,: g1 u5 \- Y- I9 G" {
  4.                 return(0),7 \7 l5 q0 N# A' n1 N
  5.         n == 1,% d* G8 q) `, z+ j$ _' I# X
  6.                 return(1),
    9 b& ]7 [6 [: I& ]4 @6 |
  7.         return [F(n - 1) + F(n - 2)]9 M$ ]# a! R9 z  B' U
  8. };
    " r2 T2 \& y7 Z. S, z
  9. main(:t,n)=! T9 t1 z: G. t7 E8 [! @
  10. {$ g  R  Z5 h3 {+ U, o
  11.         t=sys::clock(),
    . \( f+ t, x! @+ R3 r+ O! F
  12.         n=F(40),' p8 E& H/ u9 @5 P7 I
  13.         t=sys::clock()-t,, Y/ a0 ]( f0 y  ]; Q5 Z% Q; C
  14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}4 f2 O- l  T2 p: _* d. D
  15. };   J' r( b( ^- t  B" F% ]1 s
复制代码
结果:
7 T7 C3 V$ O' R7 P0 m1 b3 w; h, [+ T5 F% ^* s
fibonacci=102334155, fibonacci_Time=41859毫秒=41秒
: J+ w% n# M7 y1 [2 {% s2 @
% R9 `9 V: t5 Y例2:八皇后问题8 S2 T# Q3 F; q; ^( ^
  1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。% y0 K( I- P6 ^. G' V1 V
  2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。
    7 N" X+ R  Z& r+ m7 G
  3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。1 `8 l9 `7 ~3 h+ L- N6 X
  4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。$ _( t$ K: N  E' P0 f& F, I
  5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。
    4 o" X# i1 A$ W0 }
  6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。
    7 n" s% i9 a% E
  7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
    / r$ w6 z6 v: [7 X* F& \5 \
  8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
    ! e5 _7 A" i; a) K# @
  9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。 * f! y0 y. r6 @; \, C5 i+ w7 ]+ g
  10. //Forcal源程序9 ]3 j+ t. M0 [/ A% G7 U3 W# b: e
  11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);
    3 J: g4 R% g% Z7 V: o/ y
  12. i:test(row, ld, rd : pos,p : sum,upperlim)=8 ^5 k" N. T+ {" q' \
  13. {( @" {1 X! z9 J+ a
  14.     which
    ( z  [2 o; d& `0 B$ A
  15.     {   row != upperlim,; x1 i" m) ^2 L5 G1 ~
  16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},
    . J! I$ ?7 s, W: ^+ G7 R; y5 F
  17.             while{ pos,
    $ g( A1 @) x5 i
  18.                 p = and(pos,-pos),
    5 F7 I/ G! P( i; B/ a" b- f
  19.                 pos = pos -p,
    7 U$ t7 |4 L; h% I! {; U
  20.                 test(row+p, shl(ld+p,1), shr(rd+p,1)), j3 p) s/ X" Q3 |
  21.             }
    1 g  V& y2 Z9 D3 u( q
  22.         },& }/ q- H% D' W; L
  23.         sum++) `* I  A& `2 K, T2 R- \: I
  24.     }
    $ c" u" F6 \: D! t: I% J
  25. };
    0 @  y) n4 f- K2 j3 o
  26. i:main(:tm,n:sum,upperlim)=+ t. Z3 s+ L" v3 l4 r
  27. {
    " {2 K: t# b  ~
  28.     n=15,
    5 r9 A$ S# E- A% b1 @+ p8 S7 H5 M! L
  29.     tm=sys::clock(),
    7 i& `* \' o6 `5 [$ a3 t- O  {
  30.     printff("Queens:{1,i}, ",n),
    * R4 c+ |8 n  ~4 v1 m0 V) h
  31.     upperlim=shl(upperlim,n)-1,
    : u: K3 @0 o* \  H- u7 |  p
  32.     test(0,0,0),
    . m5 O6 H; u" d' H9 i
  33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)
    ! t2 i' {* u  ^" B3 e: \/ h, x% S
  34. };' Q  m9 m! C# d' Z
复制代码
Forcal运行结果:
: `  g, D4 l, f# K' l  O
. d7 }; q6 X* [; C$ \3 k1 D    Queens:15, sum:2279184, 59547毫秒.0 l/ r3 @$ Q( n, L( K+ r
7 g  D* D$ `/ K& F, z- y
例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右$ S6 e+ x) y. X5 S7 T
  1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =. x; ~3 R, j$ O3 v7 A$ `! Z4 ^
  2. {/ J9 o" H3 O1 {& b2 C) r# m
  3.         cr = y - 0.5,
    / d. [# w. d7 `- I
  4.         ci = x,  _0 u% X4 j% {4 \0 Y% y+ Z  F2 u: I
  5.         zi = 0.0,
      L! f1 L- v4 ]' r$ l! l+ E
  6.         zr = 0.0,
    & R2 Z7 p# W2 U9 F# P. ^
  7.         i = 0,
    + y# ~( E. ?+ v& \% {; R
  8.         (1).while {8 Q1 s: L$ [8 _8 j, m
  9.                 i ++,
    / j" H- ^! B# T7 ^( C, ?
  10.                 temp = zr * zi,1 q2 s: \- E# Q& o0 ?
  11.                 zr2 = zr * zr,
    9 s4 t. u! L/ L- H
  12.                 zi2 = zi * zi,
    : P4 Z1 W/ j  H- H- O4 y
  13.                 zr = zr2 - zi2 + cr,
    9 p8 j8 B: Q: j2 p' t4 _# d
  14.                 zi = temp + temp + ci,6 K$ B5 H2 s' m/ f0 y- K5 s( l
  15.                 if [zi2 + zr2 > 16, return (i)],8 X' h: _5 T6 \" ~  B& e$ o
  16.                 if [i > 1000, return (0)]
    ! s3 `& p+ H; F; q5 ?
  17.         }
    - e8 Q2 B, o% X9 @- P& H7 S# x9 }
  18.         
    0 k" t$ y( C. x9 d
  19. };
    - S# d  g1 |3 j6 T
  20. main (:i,x,y,old,now) = {2 K5 L; o4 l) B) t( }8 l4 s
  21.         old=sys::clock(),  h, Q- T! o% `& @7 U" R
  22.         y = -39,& _; {$ o; G, r6 G4 g5 S
  23.         while{  y < 39,0 {0 D4 a2 a& n. C' b- j; P. x5 ^
  24.                 printff("\r\n"),
    % p- l( F" x- j
  25.                 x = -39,
    ; B- p/ c, R& [7 _2 u. H
  26.                 while{  x < 39,: K  A; _4 O6 [5 V' n
  27.                         i = mandelbrot(x/40.0, y/40.0),
    6 q' [$ ]: c8 s+ o0 F6 g
  28.                         which{        i==0,6 e/ ~% f, _0 u# R# o) k0 Y
  29.                                 printff("*"),% O: P! l/ ?6 j8 t
  30.                                 printff(" ")1 a+ c& ~, S* B0 I
  31.                         },
    5 v& d- O; w7 E# ]  N, e  r
  32.                         x++
    5 i3 R0 R+ K" a( q! C
  33.                 },/ V7 I8 [2 u/ B1 \) w0 I
  34.                 y++
    ' J* \5 l$ z" i& A. D
  35.         },8 _& P4 G* F) _  g' n6 d
  36.         now=sys::clock(),
    . ]3 R1 n4 m( a5 [. p2 C
  37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000); R8 z9 I+ N8 e/ g
  38. };
    * S  m% c" d* W2 w( u6 r! {7 x
复制代码

' e5 G; x% e1 C6 e5 A/ f9 r$ C运行结果:, \' J) h% ]5 j
  1.                                        *. J% D2 C) n6 k/ m6 p! j" T3 D
  2.                                        *
    1 w" W- `9 ?3 m! c% B9 I
  3.                                        *' R4 f" E9 T, U& L2 ?. r
  4.                                        *
    4 G; I" P8 S% o( o! \
  5.                                        *
      M$ F: n# Q" U3 S# I" _; g8 a2 b
  6.                                       ***) g% q+ X/ e* u+ R# J$ A
  7.                                      *****6 i8 U$ b* n( M% b  ~, b, x
  8.                                      *****1 q. v- y. y+ ?- m. F
  9.                                       ***( T9 {; v# G" q9 r" X0 C
  10.                                        *
    . T# \. Q2 h8 D# u, p  C4 F
  11.                                    *********
    ) N2 `- F6 o8 j0 I4 _# C
  12.                                  *************; f- A; [1 Y- {0 A& W
  13.                                 ***************
    # m$ T4 a8 f0 q' U. R$ \
  14.                              *********************9 O: j" i& v( o6 u
  15.                              *********************
    - r: K0 j5 S0 p5 ~0 `
  16.                               *******************0 y, d) j: ?6 l. i' o4 `
  17.                               *******************) j( x% L) p2 E# |: w! R; X
  18.                               *******************
    / ?, U9 ]/ N! W3 t
  19.                               *******************
    / M. s0 ]2 L2 J  k" c
  20.                             ***********************
    ' e! }; U7 ^- W$ x8 ?
  21.                               *******************  ]! e' T0 l1 v' V3 C0 ~( O* ]
  22.                               *******************
    6 \3 \# {5 a& v9 @
  23.                              *********************# U" s, j# M, i7 E
  24.                               *******************
    ) S" K/ X; G1 o3 s
  25.                               *******************
    ) X" A6 w- X0 u4 |$ ?5 F7 i- M
  26.                                *****************
    6 P4 b4 L# @3 `. O/ J" W
  27.                                 ***************
    & s7 F6 b' q- q5 O
  28.                                  *************
    $ D9 H) `2 t* d( w* x( u
  29.                                    *********
    4 @6 u% `9 l4 d6 K- D, T# ^
  30.                                        *( r: `; n3 I% C, I7 \
  31.                                 ***************
    8 x+ G4 {' ?( X* K% F
  32.                             ***********************7 J7 `" R. l: l  u+ D$ n
  33.                          * ************************* *% @+ _( m4 @6 a) p/ D
  34.                          *****************************! G' M$ j" f" _" b+ l% u$ H+ n. ?
  35.                       * ******************************* *
    7 ^& ]9 `: b* J& l, U
  36.                        *********************************4 h  _, S+ k% {4 F
  37.                       ***********************************3 F( r5 o7 C; Q- j
  38.                     ***************************************
    * B& x# |8 f$ c* Q
  39.                *** ***************************************** ***$ x8 X' `7 x8 w# m7 [" H
  40.                *************************************************) v8 I! u7 v" A6 w
  41.                 ***********************************************
    ; g0 ?9 ]3 C! s, z% ?4 F) I) d
  42.                  *********************************************
    6 T- U9 H  q  W3 N4 @
  43.                  *********************************************
    0 W$ V* t8 b9 K$ `, }
  44.                 ***********************************************3 |# |8 _9 E# w/ a) u/ C; Q* y
  45.                 ***********************************************# b4 n& |) j, s+ K" Y0 A4 e4 m$ q
  46.               ***************************************************# y4 g7 L& g( S: r: @9 d& c/ p
  47.                *************************************************- J+ I$ L- @3 z) N. N
  48.                *************************************************! P8 T$ D  J# E( A+ ?
  49.               ***************************************************
    9 O' l9 t) [4 J
  50.               ***************************************************
    2 a  o5 i: l. U
  51.          *    ***************************************************    *- ]: a% S+ i7 o% X0 M
  52.        *****  ***************************************************  *****2 c3 K" u* C: e8 Q. {# K
  53.        ****** *************************************************** ******
    ) e; r% [) T/ ]
  54.       ******* *************************************************** *******4 q/ u: b: d- k6 D7 u6 ?5 [! H
  55.     ***********************************************************************
    , ^  @  j# Q: r; o* s: M/ Y) x
  56.     ********* *************************************************** *********! w. U7 s, }/ B" q  U8 M2 g" }
  57.        ****** *************************************************** ******
    0 x! ]) n$ ~  [" m: O
  58.        *****  ***************************************************  *****- }: ]8 H4 }+ R& m! F1 ^9 U
  59.               ***************************************************) l6 v4 ~2 \+ d7 b% x  A0 p
  60.               ***************************************************
    & t# J3 x6 }! ]) P/ p2 z
  61.               ***************************************************2 m1 ^' H6 J0 _" ]6 |6 ^1 d" l
  62.               ***************************************************
    1 p! Q* b* V. G" M4 M. G
  63.                *************************************************6 C5 s. h3 ~; V" S  Z
  64.                *************************************************
    * B. t# k0 t: c2 |* Z
  65.               ***************************************************
    0 F% z- k) i$ v& {' i1 ]+ u- R
  66.                 ***********************************************
      Z1 H4 u' h* \! l! a4 z/ ^4 ^; m" x
  67.                 ***********************************************2 r/ J- H5 I, V9 x* G3 E  [* m
  68.                   *******************************************5 X. _3 T7 }7 @
  69.                    *****************************************
    / g; Y+ A) o- n/ a% k" y) d$ l5 A
  70.                  *********************************************7 V  t4 R* s. c! e, q
  71.                 **** ****************** ****************** ****. L- W) c! J5 W- @( V6 @3 B$ }
  72.                  ***  ****************   ****************  ***7 w; w; E- s( w# T- F
  73.                   *    **************     **************    *8 f( x: O3 U$ u9 v4 M
  74.                          ***********       ***********
    ( g; D, L4 t0 O  P: y+ N7 _2 b9 [
  75.                          **  *****           *****  **; _- ^  y0 N0 o/ g
  76.                           *   *                 *   *
    * }7 u. |2 I8 _+ R8 Z! ~1 u  D
复制代码
6 Q) D, `! w: w! r
运行时间为:7 j7 o* f( l8 s% p% P5 b/ |

9 n( }1 @$ d/ _' u& L+ H' A- Z0 ?        Forcal Elapsed 1.078
( B, L; _2 [$ w& y4 a




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5