QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3074|回复: 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的扩充性能更好。# g/ Y- X5 o, F3 q- U
    在大量函数调用时,Forcal更具速度优势。& O  O- {. G) G& m6 @9 h& |# O
    以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。+ I/ `! V% Z4 y8 T) N" e

    + o/ ^1 W. n& i5 F例1:Fibonacci递归程序(n取40)" F! L4 D9 t1 T4 a" u* u
    1. SetRealStackMax(1000);
      1 [' ]2 w! O/ B0 P) B
    2. F(n)= which{/ }3 i1 p4 |8 g9 n( E# ]
    3.         n == 0,
      ; H: q0 I% d8 V% X! z' r
    4.                 return(0),
      1 }1 n# D1 `3 M# B/ W\" w
    5.         n == 1,8 w( e\" Q3 I# o6 X9 ~
    6.                 return(1),
      ' W: _/ S. G, A1 f6 X
    7.         return [F(n - 1) + F(n - 2)]
      - X& e% L\" g* {- Y) d
    8. };  h0 I6 {' R! L
    9. main(:t,n)=
      ! A- h. O/ D- Y) m3 l
    10. {& w. _- G' S6 k: @/ w' t, }( c
    11.         t=sys::clock(),* o5 L3 d+ h# q4 E
    12.         n=F(40),  ^5 ?( X4 B# c6 J& r
    13.         t=sys::clock()-t,0 w4 c2 t. A% f, Z3 I
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}- l. V# K# P/ F% x1 v. g
    15. };
      7 x3 `1 r, o5 i
    复制代码
    结果:  U1 K( R9 e- B% }$ y& W+ b1 H+ s

    3 |4 _0 t" g7 Afibonacci=102334155, fibonacci_Time=41859毫秒=41秒1 h) U& e$ r, q! C: {. h# t

    + s3 _3 c* I; K+ p例2:八皇后问题
    $ Q' L9 U3 i# f1 @- R: R
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。: B* t* C' K: Z, ?5 n' y
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。' T# J( O# u9 M- ?( y% V
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。
      4 H+ ?* I$ k. J( ~& F
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。/ s! @2 @7 V% Y7 K, u
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。
      : V( L& w3 ]# G/ R! \; p
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。
      ' E/ Z, g3 }: k\" {) f$ U; d/ t% W
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。# P( J: X2 m+ J4 [' i# j  Z+ `( v
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。: |( v; C( l' |
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。 ' ]  v  n! b; K( B% [& H
    10. //Forcal源程序* Y1 @$ [/ k  P* Z8 F4 n1 F\" W
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);\" j; u% U4 k, W. m  ^* l! M. j
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=& {) M% b* F5 w  Y* c$ v6 M\" E4 x
    13. {
      4 D\" [6 R% _9 g
    14.     which
      ( z+ ]7 K. }\" `' ^
    15.     {   row != upperlim,
      : _# g5 J\" F% D* h8 b
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},
      ) v$ y/ u, s1 U5 U6 m4 Y
    17.             while{ pos,
      5 H  s6 ~$ C( X4 \( L6 L. L0 f
    18.                 p = and(pos,-pos),) m; [2 H! I# B! r5 {2 a
    19.                 pos = pos -p,# r, ~9 r+ g6 Q1 F( K; ?  t
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))
      & @. _5 A. k+ |
    21.             }
      * P( t2 ~$ G; b' N$ a' u4 r9 J0 c
    22.         },5 b4 i1 d\" u\" B! b9 x; f  _- F
    23.         sum++
      $ V1 R1 ?: A2 A) N, u
    24.     }
      : V! t) t7 p) `3 n( U- [\" l
    25. };
      5 K1 M  G3 i( @6 B7 S, q0 [
    26. i:main(:tm,n:sum,upperlim)=
      ( e7 w7 c: U  O7 m. v
    27. {1 n+ d* c! A0 ^  \( H% k$ @/ Q% K
    28.     n=15,
      5 K* I8 W, G1 p\" d& r4 r: e
    29.     tm=sys::clock(),
      % o; K+ v+ m5 `' \
    30.     printff("Queens:{1,i}, ",n),7 S% _% c! s% H) u2 ^
    31.     upperlim=shl(upperlim,n)-1,
      * c\" R( H5 e, j3 \* m) P4 ]
    32.     test(0,0,0),
      / B' y! D: w+ |: e5 y2 u# f5 D2 ]4 e
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)# A' P( m. D4 R! X  h' ^: N' L; ~
    34. };
      * i* y9 T+ n8 f. T
    复制代码
    Forcal运行结果:9 a0 N. p: s) w( c
    ; v  C4 Q* \7 E+ E& w0 a  d
        Queens:15, sum:2279184, 59547毫秒.
    9 }9 }" P" w0 {1 A. V8 T
    6 f2 I  p2 ^! [+ L" N) n! s* D例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右3 X' e) d+ T1 [2 Q1 w- Q$ Y
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =4 P! K  L+ J0 v% u% l  y, g
    2. {
      6 _; y- M9 f\" p' \  Y\" X6 P\" l- f
    3.         cr = y - 0.5,4 D7 @8 j8 g, W. Y
    4.         ci = x,
      ( b  x  M2 T1 j+ D
    5.         zi = 0.0,+ r/ Z4 d1 ~! F2 z! s! N6 M, w
    6.         zr = 0.0,1 `  `2 ?# M$ T+ D2 m) c
    7.         i = 0,
      4 z5 W$ Y3 _\" O( S9 m9 J
    8.         (1).while {
      ; I. @& q( k' g9 G# _; X
    9.                 i ++,
      : Y8 Q7 @' R3 {  e9 S. r
    10.                 temp = zr * zi,
      , n. Y5 O/ G* L! t\" ~9 @' @$ Y5 L# P: t
    11.                 zr2 = zr * zr,1 t( K, s$ J1 e4 `) h; P; G+ v
    12.                 zi2 = zi * zi,
      / M7 f- }* \/ [, V' Z, |
    13.                 zr = zr2 - zi2 + cr,3 @  `6 i2 k% L! t; V0 O6 _: x
    14.                 zi = temp + temp + ci,7 P. h* `& h9 A8 R% v# A
    15.                 if [zi2 + zr2 > 16, return (i)],: f- p$ y7 m! p8 ?: ]
    16.                 if [i > 1000, return (0)]
      ; W/ E  {( O- E0 [
    17.         }
      2 s3 p, [5 d; r+ o. V& U( Q
    18.         
      / [3 ?, ~& I6 W0 ~
    19. };
      & U, Q& t4 Z) X& c  p
    20. main (:i,x,y,old,now) = {' O2 h0 L$ v2 k0 o4 t
    21.         old=sys::clock(),: s2 `4 ?& g. L2 L
    22.         y = -39,6 P% U/ z1 F. u
    23.         while{  y < 39,( q# A! ?- p0 \+ \6 M! U! {
    24.                 printff("\r\n"),
      3 w5 d7 v3 {8 F& f; t
    25.                 x = -39,
      7 x; |( h, f8 i
    26.                 while{  x < 39,/ M: `( l9 K- \- N\" s! A
    27.                         i = mandelbrot(x/40.0, y/40.0),) g  P+ S8 {4 P6 R
    28.                         which{        i==0,0 c( q* I4 h\" v; F
    29.                                 printff("*"),, M4 o: E3 f6 _' S( K$ ?: q
    30.                                 printff(" "); G$ E& f* J* Y) _, ^+ n
    31.                         },& p) E- C1 V. J# B  X
    32.                         x++
      ( b. v* R: l+ ~\" `' I6 r
    33.                 },
      * ]% |+ R( e( a- I7 b* G
    34.                 y++$ }7 L0 t, E( v5 }0 F( }) H
    35.         },
      - ]4 i% [  A4 w3 A
    36.         now=sys::clock(),
      ) k$ N\" F9 k  T
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)0 V+ V* f5 O  U3 O& j0 l2 u+ \! W
    38. };1 b! C4 |* {& ?- C! }8 H
    复制代码
    4 c, i) N3 n) ^  d2 D
    运行结果:
    5 Z3 w# l1 n- N
    1.                                        *
      $ E3 C6 [; O$ x& a+ b
    2.                                        *( o0 `; m1 b- |: [% w' T& f
    3.                                        *
      ' u7 d5 |0 B+ y' C
    4.                                        *3 G; d8 i; S# U# J4 Z$ ?& D, Z
    5.                                        *
      & H- x\" n1 r\" r
    6.                                       ***
      ) r\" A5 X6 x2 F9 |, q  \( @
    7.                                      *****
      5 d. W0 `\" w9 z  z9 a$ [
    8.                                      *****
      * U8 S2 F& U9 {) W; F
    9.                                       ***: ~- j, W. b\" U0 h* u
    10.                                        *
      ) J; H8 ?6 O+ w- u9 a/ c4 g3 L
    11.                                    *********
      1 p' }5 d1 l3 J1 e1 ^
    12.                                  *************/ H  s( Z% A! s\" m
    13.                                 ***************2 o, S  d$ x+ a1 g; z% F
    14.                              *********************
      % {0 ~; _\" ]; u$ j6 d
    15.                              *********************
      / B/ Z& }3 ^* Q$ V) s
    16.                               *******************2 R+ \* W: M! n3 Z
    17.                               *******************% p0 z' R. Z. _0 j
    18.                               *******************
      ! M* y' ?. ?2 g$ y\" A\" o1 T
    19.                               *******************# c8 p  e- S. O$ t( A( o
    20.                             ***********************( A$ i$ G5 u' P4 `
    21.                               *******************
      \" ?, B\" `9 w0 I. S6 u\" R
    22.                               *******************5 j* O+ o7 y6 }1 u, F# z
    23.                              *********************9 D) Z5 E) M% |( X
    24.                               *******************
      * t$ H1 r& ?9 n8 i
    25.                               *******************
      1 ?) M) O2 {\" M4 [- t  D
    26.                                *****************$ ~! m, B( d\" R) ^7 u% A
    27.                                 ***************
      ; u/ v8 b4 h* r9 J! z- b1 Y
    28.                                  *************, l# K4 |% |% c4 R+ @1 o( N! M' h' S
    29.                                    *********& O4 w+ \2 B+ z: R
    30.                                        *
      $ K4 z7 X( w7 e8 n3 e
    31.                                 ***************/ t9 [. P% T7 x! i
    32.                             ***********************! [6 c- w! N3 J% h; u# x  ~. W% l
    33.                          * ************************* *+ T5 g7 q% `# P8 b9 c
    34.                          *****************************
      5 E  ?' C0 V  x* g# Y
    35.                       * ******************************* *
      $ K% t5 t# |7 D0 H
    36.                        *********************************
      1 H$ e; Z, C- H9 U4 |\" i
    37.                       ***********************************2 `1 S, b9 I9 ~& u& q) x& }
    38.                     ***************************************
      # m$ }9 K. q1 s& c! x7 H
    39.                *** ***************************************** ***
      ( ?% f4 N  j( t4 c8 j# E( \
    40.                *************************************************
      & h, j1 M! U7 ]# E
    41.                 ***********************************************# b  [# t7 O  Z* @7 ^+ X
    42.                  *********************************************7 M+ T9 m7 ]0 Z0 @9 J& m
    43.                  *********************************************
      0 M. |3 ]0 }6 z5 |
    44.                 ***********************************************
      3 x- V) f( A, `: H! M8 F
    45.                 ***********************************************1 t\" J  `/ g& J6 M; |( T$ w
    46.               ***************************************************
      ! @! V- u. ?7 a: _5 q
    47.                *************************************************
      & `+ E. y4 ]- q) q6 {( r' t$ F
    48.                *************************************************5 P3 a2 L; B6 _! L% I  B5 w
    49.               ***************************************************$ L$ I9 y4 d( G; I2 y
    50.               ***************************************************. J! w5 N1 m7 W) l
    51.          *    ***************************************************    *2 q  {) e; m% b/ Y7 |# T: g
    52.        *****  ***************************************************  *****
      % u. x' d! a2 Z% n& N* P
    53.        ****** *************************************************** ******1 L/ ^3 Y# k/ l\" Q* |  I2 N+ t4 a2 u( j
    54.       ******* *************************************************** *******) z( f( i6 N# ?+ K! F4 m, ]
    55.     ***********************************************************************
      . [' D* h\" ^$ A! r
    56.     ********* *************************************************** *********
      + u; o5 w1 u/ m; G% q. X
    57.        ****** *************************************************** ******/ d; m. C  I% e4 X\" T2 r
    58.        *****  ***************************************************  *****
      & \; a, `! C) S
    59.               ***************************************************4 {6 j3 C3 i, n) S
    60.               ***************************************************. o5 ~\" C' F4 ^4 B, g  c9 Q. A8 r, R! V
    61.               ***************************************************
      * K5 G* r) Q- l6 Z/ d9 h
    62.               ***************************************************; N0 Z: Z' r5 l& w& ?' \
    63.                *************************************************% ^* {  T/ b+ R! R$ Y+ Q3 v
    64.                *************************************************, X% j0 S. W* T\" w, M9 v9 M* h
    65.               ***************************************************7 i& O( a9 U; u5 s0 X7 [
    66.                 ***********************************************! B  m, y9 _: N. T& V& w
    67.                 ***********************************************. P! s# {: _! N7 B+ {* P
    68.                   *******************************************
      / x6 W- x3 I/ P, t' F
    69.                    *****************************************; y1 `8 |# u4 V2 b, o* S$ d0 m
    70.                  *********************************************
      ; L7 w) }3 w/ a( J0 I9 q- |$ r
    71.                 **** ****************** ****************** ****& C( X- B/ ~7 J7 V7 T. W: J* Y! X
    72.                  ***  ****************   ****************  ***
      6 F3 ?. c2 l9 K2 \2 x' R
    73.                   *    **************     **************    *  [, M7 O: c/ x  f4 N2 B/ U5 L
    74.                          ***********       ***********
      1 U) l\" Q, q7 Y' J$ c1 o& z# U. V- x2 |
    75.                          **  *****           *****  **9 R7 b* X4 R* ~7 z6 ?
    76.                           *   *                 *   *
      6 C0 J' q  l6 q1 b& o5 s0 ]/ m5 t
    复制代码
    2 A+ r; R: G5 n1 s2 E
    运行时间为:3 P  A; w9 ~! S  N  B5 _
    / e4 L1 |. y( ^$ I1 m- p, w) @( y
            Forcal Elapsed 1.0780 H- J$ ?7 K( y: Y. L/ }: e! y
    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, 2025-11-18 04:55 , Processed in 1.118532 second(s), 51 queries .

    回顶部