QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3294|回复: 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的扩充性能更好。- k* R( `( d& {3 a
    在大量函数调用时,Forcal更具速度优势。3 ^2 X7 Z& W$ b
    以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。9 ~: ?; t  P4 q4 I* T1 t& K% t
    ( L9 Q) W2 y6 @: E6 L+ M  ^
    例1:Fibonacci递归程序(n取40)" e0 k6 a' x+ K, w! v& {' ?% G2 {
    1. SetRealStackMax(1000);
      & S4 r' n\" n- Q
    2. F(n)= which{
      6 A' e* R3 I+ I\" n& n
    3.         n == 0,
      % r' `9 F0 u# l3 y\" B
    4.                 return(0),
      ' z1 I: f$ J0 U\" d: `  |9 w
    5.         n == 1,
      ( H; ]$ y0 P; N( W; j4 t# ^7 u
    6.                 return(1),
      . g1 \# l* G+ |: m
    7.         return [F(n - 1) + F(n - 2)]
      ' K# |) J/ ^# r- S
    8. };; F0 X* i; T/ D3 b( j
    9. main(:t,n)=
      # _, N/ r2 A4 j( d- u$ @
    10. {3 \$ ?: |\" H+ s% }+ b
    11.         t=sys::clock(),% P  M# M4 ^) k5 {8 c8 i
    12.         n=F(40),
        W' T+ |& I) u9 g7 f* B0 N8 C
    13.         t=sys::clock()-t,
      ( G$ A5 v! h! m2 I/ O3 j7 L
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}! o; Z% a: i* ~! @
    15. };
      ! H( _) y1 c) n4 S1 E
    复制代码
    结果:
    " `6 f/ ?/ L. w6 d- C" a
    1 T; H) l9 `. hfibonacci=102334155, fibonacci_Time=41859毫秒=41秒9 S  s5 d2 H6 k% @' ?: `1 ?
    $ _+ q3 v$ g2 a) j2 c
    例2:八皇后问题+ W9 n' ]( X# t( ~3 b9 |* F8 {
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。
      , Z- I! N; j1 ^$ m# F\" m' ^
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。
      & Q3 E5 r  @6 y; P  L0 I  E- s
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。& W\" k) e0 ~. |- P& s, C9 l
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。
      & o2 p8 c8 P2 p* I, P\" u
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。
      / }  h* S1 t; A- x& w5 k1 ^
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。7 O/ h8 |7 e6 X; k4 E
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
      9 l2 h\" A  L9 C7 i; N. _# @* `
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
      % e+ j2 H' b+ O1 B
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。
      % a9 r9 D+ s4 e: Q- b/ A
    10. //Forcal源程序8 s8 X4 y& ~+ ^7 R8 Q
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);9 J# n, m' A/ P6 v2 X
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=
      . w) j7 f. |  ]+ h
    13. {. u  N) ~* m7 x0 y7 o/ ?
    14.     which
      3 W$ V\" I3 y+ b\" U  x
    15.     {   row != upperlim,
      1 j! I2 Z) f\" u2 U
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},
      ( ~# G2 I\" ~1 o& R8 \' }6 H
    17.             while{ pos,8 _2 L6 R. F$ V: [3 T5 [3 _\" L
    18.                 p = and(pos,-pos),9 l9 O5 f1 j( _& i
    19.                 pos = pos -p,
      1 j2 x+ u# X- U3 T+ d( T8 L& }9 x
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))
      # p; d- F9 ^- |. p: V% m
    21.             }9 e3 P3 Q; z$ O0 p# I8 V& s
    22.         },! |* r/ i  K& J  X0 n5 z9 @
    23.         sum++
      / P: v- ^/ p& R: q2 ?# x$ Y# {$ I! m
    24.     }0 m2 N0 n6 Z8 o; p
    25. };
      7 U& C4 Z* e) Y/ H$ E  ^6 y) _$ D
    26. i:main(:tm,n:sum,upperlim)=
      - n% d! S) W! C\" C8 O% ~
    27. {
      \" ^* v$ D* I2 v7 _' v4 m
    28.     n=15,, d7 a  ]- p1 d3 x0 D
    29.     tm=sys::clock(),
      9 `; Z6 C* z  p
    30.     printff("Queens:{1,i}, ",n),8 y% l- F, j9 Y$ @# R  S
    31.     upperlim=shl(upperlim,n)-1,+ M& U2 t/ v2 j( s9 H
    32.     test(0,0,0),
      3 w) C( R8 O4 ^5 q) ~4 b* V  r
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)
      ; L9 E) R0 C. P0 d9 O
    34. };; u# Q. q1 [. H7 }8 r2 t
    复制代码
    Forcal运行结果:
    2 o( D& @) m/ Z* D8 L5 n
    % M& x& u3 l3 H" t/ B/ U- V    Queens:15, sum:2279184, 59547毫秒.3 \' o* \/ R% n5 y8 T
    ) ]( A. B  j. K+ c
    例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右6 m1 D! y. a7 _) N7 _
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =
      # \& u# q& r  E3 g! o' I
    2. {$ Z: e: z! r  b3 @
    3.         cr = y - 0.5,
      $ y6 [: h9 e7 `( k- U
    4.         ci = x,
      5 M; l) k4 Q! S  `
    5.         zi = 0.0,6 j: \\" m& G2 [+ M* Y8 {# N
    6.         zr = 0.0,8 C# a3 F& E8 y6 U* Q7 d; P
    7.         i = 0,
      8 r1 M2 a. s0 `- x9 H\" }0 h# ^
    8.         (1).while {
      / H. F- k\" B; p5 k1 [% n- b
    9.                 i ++,
      9 y8 s+ N4 E2 u7 @9 {
    10.                 temp = zr * zi,- @2 ^7 W% b8 Q; ?: U0 a6 w  _
    11.                 zr2 = zr * zr,
      4 t; A7 `; ^) J9 C0 u
    12.                 zi2 = zi * zi,( K, b& L6 f8 s& ?9 f/ S* L
    13.                 zr = zr2 - zi2 + cr,
      7 a4 A9 L  j, F- p$ A
    14.                 zi = temp + temp + ci,! Q4 p9 W- \- L6 k: I4 Y# ~& I
    15.                 if [zi2 + zr2 > 16, return (i)],- b1 m1 t9 s) [  _* C- |) ~  h
    16.                 if [i > 1000, return (0)]
      , x0 ?\" O# ~9 K2 }
    17.         }
      * x/ t2 t' b/ p9 d& H2 c
    18.         
      3 T: n. R# Z/ `5 S
    19. };6 E; a  p9 P0 _4 `+ h% {0 I
    20. main (:i,x,y,old,now) = {  I) p) w# P: {9 m) p. w
    21.         old=sys::clock(),) G% Q( x( B7 ^% C( P6 g
    22.         y = -39,0 O# n& p) @\" |/ D4 H0 @
    23.         while{  y < 39,
      ' r5 W& G: u) n7 \- w* x
    24.                 printff("\r\n"),, W9 k/ O+ Y. V0 x
    25.                 x = -39,0 f. j\" l\" U5 R$ P- E
    26.                 while{  x < 39,7 K# S% `- ~3 P4 Y# N+ D2 \
    27.                         i = mandelbrot(x/40.0, y/40.0),
      0 l: M3 x! m) r+ O$ l3 d, m! g; @% Q
    28.                         which{        i==0,, B6 L1 Z2 j3 Q$ J* ?* e
    29.                                 printff("*"),# M4 a2 I' s1 M) V' k& g9 `
    30.                                 printff(" "): t  ^, T. X+ [
    31.                         },
      7 ~; N. `' l( `( `: v$ @5 z
    32.                         x++
      & l% W, Q! u- ?/ [- {+ D# ?6 h
    33.                 },$ M5 ?! }& |, a% S0 l9 B
    34.                 y++, `8 S' ~1 ]2 Q2 A$ j) o: x
    35.         },
      , w2 h$ v. b* ^1 |, V6 L4 Y
    36.         now=sys::clock(),) `1 N! I0 L: c  T& Z. H
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)
      ' S$ f% F# W; y7 m9 _- O
    38. };. H: c; K* N& o% K* M3 y
    复制代码
    ) A6 _+ \4 W0 Y
    运行结果:+ a8 h" \! i; y5 A) L5 `/ i0 R
    1.                                        */ G( j8 x, M0 p7 l$ c: |
    2.                                        *7 N1 U- C0 z( N$ T. h
    3.                                        *
      3 K& v8 B5 t3 B/ X8 h- T0 M0 h. i
    4.                                        *
      ! }% H1 _1 ^1 [2 w  \5 i) e! B
    5.                                        *3 i  |5 g! x8 B! \6 _3 h. K
    6.                                       ***
      7 T8 |3 T9 b1 c: ~' a6 ~
    7.                                      *****
      3 }* F\" Z( e) C& w
    8.                                      *****
      . ]! h5 R3 j7 ~( ^6 a2 d: i: Y1 e
    9.                                       ***4 G) T% U$ M3 P# D+ _
    10.                                        *
      : d0 e# N! U8 I- `6 {5 c
    11.                                    *********
      9 w3 f8 w4 c+ W% D- B
    12.                                  *************
      + o: w) v  [6 N2 S4 Q* x
    13.                                 ***************
      & X! l% M/ J\" R$ F7 S
    14.                              *********************# D9 ^5 A  a, r4 [
    15.                              *********************
      ) b  b/ \- F' i  e
    16.                               *******************, }2 i# W/ W0 i& L' h\" I3 g
    17.                               *******************! h1 Z* F1 g4 I# I8 O0 C\" `. e- T
    18.                               *******************
      1 Z4 e7 c; r5 V  x
    19.                               *******************
      2 f) ^' X& Z% w9 p
    20.                             ***********************+ d: M3 i8 E# n  R
    21.                               *******************
      0 w, w2 h7 n) }4 f! T' k' {# {
    22.                               *******************
      & F7 N. e' e\" f\" T; \9 \& P
    23.                              *********************7 s1 u. h& E# E\" D
    24.                               *******************5 D1 z! K( o: D+ y. b
    25.                               *******************
      ! p. I% P\" W& `( B& D& l
    26.                                *****************8 q% Y- |' ]3 j9 m: C. ^5 z
    27.                                 ***************
      5 g& \8 X8 h1 l* t) k5 E8 b
    28.                                  *************
      4 I  I$ }& g+ W! ^) l0 q
    29.                                    *********
      \" O& w- f. ]! H9 {/ q! L
    30.                                        *  J\" N' w. G) N6 l. I\" D8 X
    31.                                 ***************3 j0 j2 N. \- e8 [5 }- o
    32.                             ***********************, o. ]; u# e  T\" W7 u* e2 x
    33.                          * ************************* *
      ; D$ N* U4 O4 ]: h; d6 Y8 D9 v+ T
    34.                          *****************************, P+ C7 [/ U6 r
    35.                       * ******************************* *
      0 y8 U, c9 E) d+ w) J% i
    36.                        *********************************. n% @1 n5 m- a% `
    37.                       ***********************************$ F\" F4 h7 U0 A( M
    38.                     ***************************************8 W7 M. x# O2 \! @  m2 y+ X
    39.                *** ***************************************** ***
      . x9 x0 C6 N0 K
    40.                *************************************************
      0 G0 T6 a( j) m4 c
    41.                 ***********************************************
      9 S( _\" R1 h4 j9 X
    42.                  *********************************************. q% V2 L/ p( f
    43.                  *********************************************2 A! i# Z* S+ d  `. C; |\" T
    44.                 ***********************************************( g9 Z! G# e( _
    45.                 ***********************************************3 r0 s5 Z' K* }# g: F) M6 Y, K
    46.               ***************************************************+ }1 J! Q5 C3 E$ m3 u7 _' D4 r
    47.                *************************************************
      $ K2 Z) y' U% W$ X6 Z( p( Q
    48.                *************************************************/ x# g2 N$ U( X! P
    49.               ***************************************************! ^5 H/ i8 h; X
    50.               ***************************************************, g+ X( l! \* ]: c$ ~' ]7 l
    51.          *    ***************************************************    *
      6 X- r/ p/ U7 s  ?- ~* Y& C
    52.        *****  ***************************************************  *****9 O& z2 f+ K1 e1 X
    53.        ****** *************************************************** ******
      ' q+ j2 g6 ]' }9 b$ v5 H
    54.       ******* *************************************************** *******
      : X- L* @) b6 M) ?1 Y
    55.     ***********************************************************************' z5 t# n6 ^6 ?& k& I& ?
    56.     ********* *************************************************** *********1 E# I1 J/ M9 n8 N
    57.        ****** *************************************************** ******% W8 _3 R3 r7 K
    58.        *****  ***************************************************  *****$ |\" @8 D- t. O1 t
    59.               ***************************************************
      9 M4 g  K% N' V\" k7 V% J3 x+ h1 E. P
    60.               ***************************************************7 p2 U# f0 _/ F! Q
    61.               ***************************************************
        F7 a& F9 h1 J6 d+ r+ D
    62.               ***************************************************/ u9 s% [# I7 A/ Z4 a8 e
    63.                *************************************************. b* l  i\" m4 w
    64.                *************************************************! E2 _  X0 A& j7 Q  X
    65.               ***************************************************6 z! ^' V+ Y8 \' h! f
    66.                 ***********************************************
      & y# o  g$ G* Z. e& e. z
    67.                 ***********************************************
      * ?, @. F8 K. i5 A' x
    68.                   *******************************************
      3 A( U; y( q  J2 B% t* p1 e0 X, A+ E2 C
    69.                    *****************************************
      % N& M\" I' [8 s9 c/ N, i
    70.                  *********************************************  a7 I: r: ]1 D% b7 ^7 ]
    71.                 **** ****************** ****************** ****
      1 k- S! i) _5 l
    72.                  ***  ****************   ****************  ***
      1 f) e; |; A: H5 [* I( c- h1 L
    73.                   *    **************     **************    *
      ! ~( k5 j; r# _: x
    74.                          ***********       ***********
      2 I0 n2 w. T+ D+ V
    75.                          **  *****           *****  **$ i3 ]9 d\" U3 p: P8 Q
    76.                           *   *                 *   *+ o! A, M# U- H) S7 d( E
    复制代码
    4 X# D8 `3 T. \3 b  a
    运行时间为:
    % ?$ N0 ]- I6 Q# L4 J3 i3 D* y+ N  t! v
            Forcal Elapsed 1.078+ f) U/ n4 o5 v% i% O/ ~9 i+ z6 b
    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-9-1 17:15 , Processed in 0.351520 second(s), 52 queries .

    回顶部