QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3413|回复: 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的扩充性能更好。
    / F0 n$ [. T  @' q在大量函数调用时,Forcal更具速度优势。# ~: T- D. L3 \; M
    以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。
    4 M9 B$ Q2 ?/ ^  Z, M
    : p% u: {& b% U" z; L1 c3 O& y例1:Fibonacci递归程序(n取40)5 x4 }3 h" w& r( h8 A* N4 z8 y+ u. `
    1. SetRealStackMax(1000);) q& u+ k9 T! A) i
    2. F(n)= which{2 H7 ^( ?/ o) ^( l
    3.         n == 0,
      ) j\" d% G% \\" ?) i% a8 @
    4.                 return(0),' g  [5 m6 X; m% J0 _; w  h
    5.         n == 1,8 |: C* s* J  K: ]6 u% p
    6.                 return(1),
      0 G: j! x1 r: V8 q
    7.         return [F(n - 1) + F(n - 2)]
      $ ]7 j* K+ Q$ g5 c  k\" N
    8. };
      4 o! D! M- M- h2 h
    9. main(:t,n)=0 s4 M# y5 c4 y2 [* u
    10. {6 v0 U0 R( k/ T. H( [
    11.         t=sys::clock(),( m* \- }0 [6 A. }3 f
    12.         n=F(40),
        ~7 H/ \$ N/ y2 ^) J, q( D1 `+ K
    13.         t=sys::clock()-t,
      ! Q- N0 Y4 Z( }+ q  G# j  @( F
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}
      0 g+ u8 S( a; X' E2 P6 n0 ?
    15. }; ! D# g+ u% M9 y9 f) }\" @
    复制代码
    结果:
    ' F! n. {$ Y' o: \0 ^7 D  }  g+ M% N/ W! G
    fibonacci=102334155, fibonacci_Time=41859毫秒=41秒
    . L% t! M' Z5 N
    # _1 _7 K! c3 ]9 B3 Z例2:八皇后问题& R; {" E: V5 b0 o: V4 f& h! _
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。5 U$ }# `5 Y5 x1 n# E
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。\" @0 P. K: j3 Y
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。
      4 Y$ C1 K0 z* n! T
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。
      3 Q8 |/ C2 @6 y- m2 Y
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。* I  q$ Q  ^3 F\" h1 T+ N! v% m5 k# R
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。; U: c: X  q1 E/ U0 c6 N
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
      ! e/ Y& n, z/ S+ ]( e: V' f
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
      , c! O/ R0 ^% a2 Q; Z+ h
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。 9 w4 X/ s8 U& I5 L6 V  |9 K' e
    10. //Forcal源程序  O0 R. V8 q& a& T. q' v, F9 R6 G2 f: Y
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);; R# s2 m6 n; [& p  t
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=( a3 d! H& x4 P1 p* @+ n3 w
    13. {
      3 {  C) x$ t: U; [
    14.     which
      $ E/ d; v! l. I
    15.     {   row != upperlim,
      7 V9 ^- d8 D8 L3 a+ t
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},
        ]. I8 w* K( w# c8 K* [6 x
    17.             while{ pos,3 m6 M& }* N* g( q# _1 j9 s% `
    18.                 p = and(pos,-pos),
      / ~; }# S- b* k, q# Q; y. v
    19.                 pos = pos -p,
      ! v: H( ~) x/ q; z3 F  f
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))0 a7 F* R6 m0 r! ^- B: i1 Y
    21.             }9 f$ J7 t8 Y3 `3 c9 Z
    22.         },) j) e' ~- k  W' C+ z& l
    23.         sum++$ W* l) \- V# C' g3 R' }; |2 R1 {\" X
    24.     }9 l) j7 F2 ~1 F) Q
    25. };
      & j3 g* Q. b' m+ s1 N9 o
    26. i:main(:tm,n:sum,upperlim)=
      5 e8 ~9 \/ [/ t5 z) C- J$ ^/ P
    27. {
      % D+ O/ k- G0 b& Q3 v/ g
    28.     n=15,
      0 C9 I2 Y6 W$ f- z
    29.     tm=sys::clock(),8 g/ G6 ~% B; f1 U) p8 x3 r* b. @3 ~
    30.     printff("Queens:{1,i}, ",n),
      6 O6 S$ W; ~1 l$ H. j
    31.     upperlim=shl(upperlim,n)-1,) H- _& R. R1 M/ L
    32.     test(0,0,0),
      $ x; C% ?6 N5 ^4 f3 V
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)7 {1 y# N) k1 ~) H1 V3 _
    34. };1 O/ G8 j( M3 r% l$ w) M
    复制代码
    Forcal运行结果:4 {# [# E" o! m
    " \9 y8 m' n# _0 U
        Queens:15, sum:2279184, 59547毫秒." W2 \) p% G& U4 j$ q0 m
    ; [7 }. M# h6 b6 P" L+ t( d
    例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右3 F' q5 q- f- Y6 V; {
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =
      5 m! o1 e/ ?+ s( K
    2. {7 n4 p1 C$ a% H5 @0 S( a
    3.         cr = y - 0.5,
      , i; R9 k: h  c7 ^\" V
    4.         ci = x,
      2 X5 o7 h, M  a# [4 `
    5.         zi = 0.0,
      ' i8 ^' f. c\" _8 z' W$ K) W
    6.         zr = 0.0,
      % {$ |$ ~  Q7 w7 M+ v! n
    7.         i = 0,
      9 M+ {( M: ]+ |. W1 V7 l9 R
    8.         (1).while {8 v% k+ r! T9 E9 w5 W0 F* k
    9.                 i ++,6 P- U  r& |( U8 P5 i% @\" @: w2 C* S! l
    10.                 temp = zr * zi,: h* U3 j/ ~\" D, T5 h4 h; p
    11.                 zr2 = zr * zr,6 b' {6 q- R2 Z/ U: g9 B
    12.                 zi2 = zi * zi,
      & {0 j! g9 @& t- o
    13.                 zr = zr2 - zi2 + cr,. X( y  R& z7 _1 H( C
    14.                 zi = temp + temp + ci,1 m# J  c\" ]\" T( K5 [, f
    15.                 if [zi2 + zr2 > 16, return (i)],
      ! }; T6 ?! }2 D, a+ r5 U7 @
    16.                 if [i > 1000, return (0)]
      3 A: X9 C8 F; r- D
    17.         }\" ]6 a( z, s7 R$ c
    18.         ! Q( D. F! x# {' }2 ^/ ?
    19. };% Q: m- i) P. ^% C3 s& |
    20. main (:i,x,y,old,now) = {# m  G8 q  N6 r* U; C- F4 `9 L
    21.         old=sys::clock(),
      $ S8 r& a/ c8 S! S. @
    22.         y = -39,
      2 ^/ x$ J0 b6 j- Q4 W
    23.         while{  y < 39,9 m% I: m\" v+ W9 K+ t
    24.                 printff("\r\n"),* V3 h/ v& Z: x9 J1 Y$ T) p! g+ N
    25.                 x = -39,+ T/ F& a* x: K1 z. ~( B
    26.                 while{  x < 39,# T+ L9 r: b# S. u/ X7 w
    27.                         i = mandelbrot(x/40.0, y/40.0),0 O( Q- a% l3 f1 D
    28.                         which{        i==0,
      ! |- ?2 J$ S9 i! X$ k, U4 y! i$ G. }
    29.                                 printff("*"),
      ' e+ c% P: Y2 `% n
    30.                                 printff(" "). ~\" e2 K2 N4 }% S0 K
    31.                         },
      # }7 V5 D, {+ H8 h
    32.                         x++
      3 z! k5 {& L0 J; u
    33.                 },8 |3 m3 |\" w5 X
    34.                 y++
      % }! S+ h! t8 q! d- m8 Z
    35.         },
      , \' G2 Q7 t' w8 p
    36.         now=sys::clock(),
      & Z4 @- A/ o9 O3 R; b. {! A4 O! g
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)! ]1 Y' L\" h6 R# [5 |
    38. };  m- y- t9 U: N7 ?
    复制代码

    ) s5 R& @$ b  x- Q7 m/ i# y) q运行结果:
    $ x2 P+ J5 q$ ?. Q& `+ F/ r
    1.                                        *
      2 R; j/ R5 P: M# H\" E
    2.                                        *$ G% A8 R/ I' m& P4 k) W
    3.                                        *9 j5 q  g# G+ f4 k8 ]( e( n
    4.                                        *
      ' w5 M! W2 b' p
    5.                                        *; X) L9 D  X' g
    6.                                       ***
      5 i$ S7 u1 v3 [# ^
    7.                                      *****8 l8 a5 S9 F$ E( H3 U5 V
    8.                                      *****
      * S* l3 k4 X, Y1 k
    9.                                       ***# w5 H$ n+ ~4 \
    10.                                        *0 m$ `: t/ T& g
    11.                                    *********7 h* U3 e- ~8 j: [& ]) n\" D' a
    12.                                  *************0 {- N( v1 g' L
    13.                                 ***************; C, T1 }% j+ t# S: c
    14.                              *********************1 N6 ~1 R* g\" A2 j# ?! Y4 F
    15.                              *********************
      : x5 v) P0 P- x- h: ^
    16.                               *******************- e1 s3 W$ l. L# f7 I
    17.                               *******************' P( h5 ~$ w2 [9 _6 O
    18.                               *******************
      / R+ @5 u! n; T9 Z2 b/ p
    19.                               *******************6 ^$ {; P9 N( D5 S* r' O- W
    20.                             ***********************
      0 d3 i% ~% u$ u% x\" }- |  L
    21.                               *******************
        T5 t1 J( f1 T! H
    22.                               *******************# U3 G0 e- n# ?. Y& _8 [) @1 Z4 q; I
    23.                              ********************** p9 @  U! X\" Q/ x) @# D. l
    24.                               *******************
      0 H: }8 _4 L$ [
    25.                               *******************! X: t* M5 P6 s\" b
    26.                                *****************
      & W: r& Z9 n$ ^
    27.                                 ***************
      1 ?+ j! c# H3 u/ t/ H- S
    28.                                  *************# j4 c% V; ~1 R% j. w! s; L
    29.                                    *********$ A  @8 K. I- G5 y' n3 l% r
    30.                                        *
      2 b1 G/ c4 B% {7 x3 e
    31.                                 ***************
      5 L9 X) b6 t) ]. T; m
    32.                             ***********************
      , l0 G4 y\" @\" x8 ?. v) [
    33.                          * ************************* *3 I$ O  R( m& e4 f: Z& ]3 F8 n' a, y
    34.                          *****************************! \- w( w8 b* M: }& f1 `
    35.                       * ******************************* *( `- A3 v8 b* s0 K+ h: j6 ^
    36.                        *********************************
      . M, A+ T# Y: Y5 c% N
    37.                       ***********************************# Q# Y8 J$ Y+ b3 n# j
    38.                     ***************************************
      - S, V' X6 B) V
    39.                *** ***************************************** ***# X0 j6 p1 W' i4 M8 b
    40.                *************************************************
      * e0 }( m0 i5 v1 s
    41.                 ***********************************************/ v* n; _/ v/ E( p5 e6 J7 ]8 z
    42.                  *********************************************\" W+ P- e: N; w0 Z
    43.                  *********************************************. E9 w+ c7 ?: E( k7 P% \
    44.                 ***********************************************; \7 y6 u/ m: A! z) `
    45.                 ***********************************************9 x$ A+ B( d  D& d
    46.               ***************************************************
      ' |7 w( y5 @6 z1 [: G( t
    47.                *************************************************6 L\" W& P5 \5 v. \
    48.                *************************************************
      + J+ }  p+ @7 T: R% t/ ?* q) U
    49.               ***************************************************
      - s6 S6 S) R. f8 K
    50.               ***************************************************
      ( N* ~% q. l* Y
    51.          *    ***************************************************    *
      / Q! ]3 S& V6 F1 @8 i) Y! g) I* K
    52.        *****  ***************************************************  *****& n* P4 c3 p' {  A! m  T
    53.        ****** *************************************************** ******$ H* z$ h# \5 k# L
    54.       ******* *************************************************** *******2 q7 I\" z8 O6 s' ]$ j* K; I( \4 E
    55.     ***********************************************************************5 N+ ?+ s+ A( ~
    56.     ********* *************************************************** *********2 E: z: A* r5 E$ E9 ]
    57.        ****** *************************************************** ******6 J  e! s+ T3 N
    58.        *****  ***************************************************  *****8 z6 ^2 [\" Q* e) P& F8 k, H
    59.               ***************************************************
      : W# Q\" z) R/ B3 u, h
    60.               ***************************************************\" C! h3 q0 H, h) Q1 A0 ]/ y8 h
    61.               ***************************************************& x6 D. V6 F/ E  X
    62.               ***************************************************. O& Z\" }6 ?2 s  b2 S- \0 w- g\" ?# T
    63.                *************************************************
      $ i1 m\" X; A$ ]/ s0 Z' ^
    64.                *************************************************% C/ e! V6 s6 i$ R- b0 [
    65.               ***************************************************( K9 V3 i) _' Y- @
    66.                 ***********************************************
      3 U& T/ R- ]6 {
    67.                 ***********************************************
      9 N# d5 Y. r1 o7 }4 M
    68.                   *******************************************
      0 g$ m4 t/ p- B) o5 e! h' M
    69.                    *****************************************
      ! w* j. J0 Z. }1 H) p
    70.                  *********************************************
      3 g6 ^/ f' b4 X$ a- ]) g- C
    71.                 **** ****************** ****************** ****
      * ^1 s& b# _0 X- L+ b3 g
    72.                  ***  ****************   ****************  ***
      6 U$ o+ R5 k& p* F# V( @8 E
    73.                   *    **************     **************    *
      ! }4 U* C6 L* _; V, Q
    74.                          ***********       ***********
      \" ~6 U4 _( d. p/ `+ B7 B
    75.                          **  *****           *****  **( z4 }' V$ }\" Y; V. w* O! }6 m
    76.                           *   *                 *   *
      ! B; P9 A: R2 x. S7 a& S1 w
    复制代码
    " [  a3 ~: _  W* o* J. u! P
    运行时间为:
    9 `& A4 |, ^7 e/ `1 V7 D: g1 X  y0 Q1 A1 p  L! j
            Forcal Elapsed 1.078
    ' D% |; f# n! c- z" [6 O
    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-10-22 10:23 , Processed in 0.398507 second(s), 51 queries .

    回顶部