QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3215|回复: 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的扩充性能更好。
    # [! v" ]8 q& j6 Y" N在大量函数调用时,Forcal更具速度优势。
    $ ]! Z$ V" h# K. I) o. }以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。# o/ f5 y& X  M

      ]8 I  B, z8 v& L+ a# d例1:Fibonacci递归程序(n取40)
    / @3 @: d5 Y( @+ S5 E3 J1 b( K
    1. SetRealStackMax(1000);
      ' P4 M, @# ]6 N# ]# w
    2. F(n)= which{3 x) i7 p# [: K' |, @
    3.         n == 0,) f6 u2 n: J\" A- I' g$ Y
    4.                 return(0),
      * O1 L* v! m) w+ f
    5.         n == 1,; k& m+ u1 J1 G8 Z; M
    6.                 return(1),( a  \! I5 }8 s; U: @0 R
    7.         return [F(n - 1) + F(n - 2)]
      : ]: o) t6 L3 }* J
    8. };
      9 t: a; A& ~! p5 h5 w
    9. main(:t,n)=( t* a, y0 T+ J! U' W; i
    10. {; u2 A5 r+ o\" O% K- J& B
    11.         t=sys::clock(),: v6 N\" G/ N4 j% T\" f% }
    12.         n=F(40),1 S; ^6 B% E\" `% l7 F4 n0 Z6 k) _
    13.         t=sys::clock()-t,- M! c: c* o% E: f# h
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}- z  h( M2 `  d) j( N
    15. }; 8 j0 `3 w( M; p% B. X6 P2 `
    复制代码
    结果:
    : h# N# L% K3 k4 O1 D! W& g) v- U6 W! w$ [2 ^7 D& ^. l. ?8 H
    fibonacci=102334155, fibonacci_Time=41859毫秒=41秒
    4 g4 }3 g( D8 S5 {' J0 @
    / T! n" Q. K% e4 s- [& q% C* O例2:八皇后问题$ H- d2 I. ^7 N7 w
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。, J) ]7 F* K( P9 [! U* S& {
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。
      3 J  ~  z/ q& {# d/ X7 Q8 w1 J( \
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。
      # W5 F) R/ C4 @7 @& d: m: e3 c* w
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。6 C$ ]6 d1 |( o
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。
      2 n/ ?% M# L1 W$ F! c4 J) z3 I+ q
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。\" n& w! e2 {( c# `4 B) E
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
      % B; ?: W9 v1 |9 C\" |' O\" P
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
      6 {, n9 p: P. i  z* n
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。 ( ^; g+ M, j8 w\" o; l1 t8 J# r
    10. //Forcal源程序\" f( u/ o' F) B( k  M) }7 m# x
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);
      / G. u0 U* p% Q# V3 r4 `/ b0 o3 c! k
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=
      7 S2 r. m& R' h0 M
    13. {
      ) {( C9 ?. s\" |' p8 H' {# Z
    14.     which
      2 J1 G( c6 H+ }
    15.     {   row != upperlim,4 Y# ~# ^; E. r: w# l
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},
      ; h. O' o- X) I
    17.             while{ pos,* V, [8 x. z, p2 a0 r7 H6 O
    18.                 p = and(pos,-pos),: r6 R( }( W1 l
    19.                 pos = pos -p,
      1 I' s, |- r& \& [( z
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))
      8 E3 {* m. w$ I- a! f7 k
    21.             }0 j8 D\" c/ Q. R; Q) Q' c4 u
    22.         },, Z8 g' J$ T, D5 a/ e: a
    23.         sum++5 c/ h/ E* I0 F1 ]8 f
    24.     }* l4 G5 C0 p& P
    25. };
      # A7 T' Z! c! v/ ^  c
    26. i:main(:tm,n:sum,upperlim)=
      * p& U\" O5 s\" V9 h* O
    27. {
      & y& @\" y' ~) N* Y% p
    28.     n=15,. ?) @3 ]6 v\" O* D
    29.     tm=sys::clock(),
      2 r) r# F2 G( j4 A/ h
    30.     printff("Queens:{1,i}, ",n),
      ( q1 ^7 \  `\" j! }3 r3 N\" x
    31.     upperlim=shl(upperlim,n)-1,
      / v. S8 g6 \& Q2 r. h
    32.     test(0,0,0),
      8 Y, Z# q) j2 _' L- t: x6 f% n
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)
      2 A* l4 H$ s) U
    34. };
      / p/ d, E0 `2 A3 c
    复制代码
    Forcal运行结果:$ D3 n, I: m2 T: W$ F" Y

    9 ?% e6 O! X- d* m    Queens:15, sum:2279184, 59547毫秒.
      ~1 e2 Y! f; p, W- p$ v
    " `! C9 M5 V3 g" ^例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右
    . M( K2 @2 ~) E% I5 B
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =
      0 _+ c' |1 e7 U) `) I
    2. {
      % h# y/ s7 Y; ^1 f1 Y+ K/ O
    3.         cr = y - 0.5,
      7 N6 G7 ^& B4 G5 R9 P: v  o3 Q
    4.         ci = x,& A% ?0 t! Z/ p3 S
    5.         zi = 0.0,% R5 |/ T2 h! G/ r
    6.         zr = 0.0,; u, B/ X4 y% W. }\" s3 o' A% D$ P# [
    7.         i = 0,
      , _  R3 }4 Z+ i  y
    8.         (1).while {& V& V1 d7 B5 h$ n0 r
    9.                 i ++,
      5 T. K, {! X! ]
    10.                 temp = zr * zi,7 `  z, d! F( i9 H% l$ }
    11.                 zr2 = zr * zr,
      6 ^9 |+ S3 w\" N8 e% t\" Q  K
    12.                 zi2 = zi * zi,
      ( E4 i$ c  k7 l$ f; X8 i( T! R
    13.                 zr = zr2 - zi2 + cr,
      + Z8 T\" F' K; R\" ]8 g. d4 f
    14.                 zi = temp + temp + ci,
        f! H: X  g3 o+ ?- H
    15.                 if [zi2 + zr2 > 16, return (i)],% z2 ^\" r. i* Q1 U0 S* ~( L: I
    16.                 if [i > 1000, return (0)]+ }' O  y3 o, F2 Q
    17.         }
      % U- }6 i* n1 G1 X\" L! J
    18.         0 e3 ^( t+ L( U! B1 S3 H\" c8 U! x3 J
    19. };2 S5 r+ L; i+ n1 k  G+ k\" m
    20. main (:i,x,y,old,now) = {' |; r) W; {- K' g6 A
    21.         old=sys::clock(),
      5 A9 x+ F2 p9 m6 I8 O* v. B) }
    22.         y = -39,
      & L, H9 r& g) b5 q
    23.         while{  y < 39,
      $ h0 H* M! y# N. K% q  Q& O
    24.                 printff("\r\n"),
      - K+ o; b) C  E- C6 a9 f
    25.                 x = -39,8 }- |' F& X1 _1 f4 ?
    26.                 while{  x < 39,
      ! l2 M: n( q1 F
    27.                         i = mandelbrot(x/40.0, y/40.0),6 U! C4 f& G9 o2 ?3 H\" C
    28.                         which{        i==0,  o4 t- d9 Q9 K
    29.                                 printff("*"),; u: J. N9 Y9 _) Y6 V' E* v
    30.                                 printff(" ")5 E. R5 ?7 w. G3 A9 T8 E7 I
    31.                         },
      ' B  T+ D; ~+ z+ a0 H) P- e0 u
    32.                         x++
      . e( P6 g  Q# r
    33.                 },$ P1 ?% G- E/ G# l
    34.                 y++) s; J4 U1 \1 u1 c. a
    35.         },
      - K1 G- Q/ Q, _. j9 t
    36.         now=sys::clock(),
      % H3 E9 |4 f$ i  G2 g: T3 b. o
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)) @! p' C& d9 `- c0 [
    38. };
      - Y5 @0 a! k  e4 ?6 @
    复制代码

    0 L% |% a4 V) S6 F5 d- F运行结果:
    ( `+ B' Y! x0 D2 N
    1.                                        *+ z- S; _3 ]7 L
    2.                                        *) l9 ~4 u+ M& ~+ R\" V. p
    3.                                        *
      ' X: w) w$ t- f: ?
    4.                                        *
      : l4 u+ K6 U0 y3 m2 n
    5.                                        *3 }- u) {+ C! ^0 E\" k1 G
    6.                                       ***( S9 t$ f. U9 l4 e\" k# c
    7.                                      *****
      0 N6 N' [5 k# Y4 H9 o
    8.                                      *****
      \" ~& W; D3 _+ a4 h
    9.                                       ***
      0 z/ ^* F$ i+ V. k- t3 W& f
    10.                                        ** k# l\" L- f6 `
    11.                                    *********( q. `6 ^; e- Z
    12.                                  *************\" _* B( N+ N7 f% Z6 P
    13.                                 ***************
      ; n$ v  ~7 H9 l0 r
    14.                              ********************** g$ K! k3 Q! b\" c
    15.                              *********************! D3 g6 @5 C4 U. W
    16.                               *******************
      3 s- @& g* g& g
    17.                               *******************
      % |3 w. B0 y: ^\" v* z\" i0 a4 _
    18.                               *******************  n! T+ V: z0 \& z  i4 j! K
    19.                               *******************7 g9 x% b3 R; A0 ~/ W2 C\" o; ~$ D
    20.                             ***********************
      % o9 [3 r% K* o/ v# _  A. D
    21.                               *******************
      7 }; h! c6 F3 K\" N\" J/ I* W
    22.                               *******************0 i0 J2 \) a  E' ~3 H! N9 q
    23.                              *********************, D' }0 m; V0 A1 U\" s. T+ C1 R
    24.                               *******************
      1 A# j3 O) C/ x1 j) t
    25.                               *******************
      7 |\" @% ~4 Q* L+ V1 S+ K0 ]
    26.                                *****************
      . _# n6 `4 v\" P5 Y6 w9 Z* U
    27.                                 ***************% h\" t1 P1 z' L, J1 a# l
    28.                                  *************; H6 n! k( [3 L( m5 e
    29.                                    *********3 `3 j7 g: M2 R6 ]; E3 K/ Q
    30.                                        *
      , k( i( U& ~5 ^- {! m! T( Z% \+ M
    31.                                 ***************3 O3 p9 z  k- {! K) |5 t. [
    32.                             ***********************
      6 ?$ M: X. N  _0 z- H7 [+ u
    33.                          * ************************* *& U& l& u/ _( I2 c
    34.                          *****************************
      ! p- f( i) q\" |: d
    35.                       * ******************************* *
      3 B8 J# D+ q' f) T$ ^3 l
    36.                        *********************************4 b/ \2 m) G8 X! g& r' R
    37.                       ***********************************
      - u2 X% _& v3 |+ s( K, |6 Y% \
    38.                     ***************************************
        J  B, V; {% z; |4 f
    39.                *** ***************************************** ***
      3 k! G/ X3 y8 Q5 ~7 Q# f1 _
    40.                *************************************************/ c$ i4 B8 {3 }$ u9 g. }
    41.                 ***********************************************
      & _0 B( n; ~  I& a1 b5 |, e8 m* P
    42.                  *********************************************- S! f& T( |/ m% p! ~& O
    43.                  *********************************************6 F. {1 g, N% \) _
    44.                 ***********************************************# y; q, z' f2 ?8 M% N' ^
    45.                 ***********************************************
      / s. r# h# O3 M$ j5 _, M  b, O
    46.               ***************************************************
      ; N6 Y) w0 e$ p% O, m8 w. N
    47.                *************************************************5 D4 ?- q( ]# {  a
    48.                *************************************************
      , L: l  B+ K5 G$ r- I* M5 w8 ~9 f# V
    49.               ***************************************************) b7 J: I& N! }
    50.               ***************************************************$ r4 F0 X' u$ I
    51.          *    ***************************************************    *: b2 M8 h7 f! b4 M
    52.        *****  ***************************************************  *****, K1 C; c\" w9 N5 n) }$ g3 L
    53.        ****** *************************************************** ******
      1 n5 ~6 g0 m; {
    54.       ******* *************************************************** ******** o7 o6 [2 J1 V0 n( [, x, a) j
    55.     ***********************************************************************2 c  m5 J* H6 T6 M- N# A
    56.     ********* *************************************************** *********
      5 b3 {; M8 \\" F+ U+ s8 f/ G, k
    57.        ****** *************************************************** ******
      7 _3 x! v+ @6 M/ E
    58.        *****  ***************************************************  *****
      . v; A. M  x0 `( D$ j+ u7 R9 A% |
    59.               ***************************************************
      ! [! h. M/ ]- V3 Q- A$ q
    60.               ***************************************************
      , u1 t2 m. _% M# L8 C! I
    61.               ***************************************************
      3 m4 b  Q2 y+ _* }0 i5 h
    62.               ***************************************************
      \" E4 u. N5 s& }. T# k. E
    63.                *************************************************8 Q2 b' H% [( V$ U: D. Z
    64.                *************************************************
      ; F1 p1 `: h+ S  x- A
    65.               ***************************************************9 t( I/ r5 X) r8 |# Z
    66.                 ***********************************************( ~9 a2 Q( r# j0 P5 J6 L
    67.                 ***********************************************
      1 D* o) W5 o4 a) g6 K6 A4 c
    68.                   *******************************************
      1 @4 k) w( d9 e+ m
    69.                    *****************************************
      , H# D\" i4 D. ^9 A) ?
    70.                  *********************************************
      1 L! {4 o  Q) g. U0 V! T
    71.                 **** ****************** ****************** ****
      3 T3 M4 r5 l9 @6 x
    72.                  ***  ****************   ****************  ***
      4 @( f0 X8 k- w+ @7 H; I) {
    73.                   *    **************     **************    *# ]1 {% a+ {: Z$ j. _
    74.                          ***********       ***********3 ^8 F7 |5 m/ P8 {/ ~
    75.                          **  *****           *****  **, @7 \/ v) G' v, {
    76.                           *   *                 *   *7 p$ g) m3 H6 G- l+ G; c. m\" d* M, z\" G
    复制代码

    8 }5 ~  s' y8 U" g运行时间为:
    9 {3 F) a+ `# f2 T
    . u$ t9 z8 R  G1 d        Forcal Elapsed 1.078
    $ e' M1 h2 T' m/ o0 J, A- d# @3 p
    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-19 07:52 , Processed in 0.410672 second(s), 55 queries .

    回顶部