QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2800|回复: 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的扩充性能更好。
    5 g- Z$ p5 F4 v6 }6 y1 m在大量函数调用时,Forcal更具速度优势。
    ( ~3 W: I( |9 c4 q# \! H0 v以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。; u1 N6 y- d+ K
    6 R* r  ~* }9 J
    例1:Fibonacci递归程序(n取40)0 C$ t# B6 h& O
    1. SetRealStackMax(1000);5 d( Z* ]$ B5 B' [! A8 V+ F
    2. F(n)= which{% J$ U0 t  l5 J  i2 D+ T$ T# u
    3.         n == 0,
      , A. ~9 N+ f\" o  O# i
    4.                 return(0),
      5 T8 n( K: Z9 q\" Z
    5.         n == 1,
      * J. F; g7 D8 G2 B6 b
    6.                 return(1),
      7 `; L3 K, _* V( }) R
    7.         return [F(n - 1) + F(n - 2)]
      $ ~4 h. t1 m0 I4 }; u
    8. };
      ' M. T$ W0 w- z\" y8 f3 c+ J
    9. main(:t,n)=( N& e8 q9 j0 P  V
    10. {
      ) G) @8 h' A) v4 G
    11.         t=sys::clock(),
      \" w7 `) O( N% K  s
    12.         n=F(40),, i. h$ v1 {\" R
    13.         t=sys::clock()-t,
      ! _5 Z* {3 o\" n: ~8 L4 D
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}
      6 O6 I* q* O/ F7 d# b* o; j
    15. }; # W\" I8 _5 G6 g\" |: b% g
    复制代码
    结果:
    4 M' j/ ~7 j, T4 R4 V6 j; X5 G0 b& g) l5 a
    fibonacci=102334155, fibonacci_Time=41859毫秒=41秒
    5 f* g2 R' @4 z2 ]4 ]
      \! n8 K" g4 V' f8 e例2:八皇后问题
    ; T: b4 y4 ?5 {& T8 A) z) p
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。% q* Y% D0 s% W9 I9 v, s
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。2 t$ p2 p6 b# F- g; @
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。' t5 n0 P9 b8 w
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。
      \" Q7 |$ p/ A. V
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。
      0 S8 T6 S# s9 G/ x- ]
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。
      ) c- Z' s: R. E! F% V, Q) Q
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
      ' C* `: [\" l; X. I) l
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。( w$ m0 o0 z9 P- S
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。
      \" U. N* Y! @5 Y* }
    10. //Forcal源程序. e5 y4 a% ^/ k! c+ ]\" @4 _
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);
      2 |' L$ |6 x7 i  @; k4 d9 Z- m
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=
      ' c- `' K- L' C
    13. {( w8 ?3 n) Q9 |& Y1 w
    14.     which
      5 b9 n\" Q8 l5 X4 U6 Q, C4 A
    15.     {   row != upperlim,
        ?5 {7 W8 S1 I$ v2 w
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},1 g' c8 @6 K2 V# e% l$ h& Z+ F
    17.             while{ pos,/ w  i) v5 Z( B2 M
    18.                 p = and(pos,-pos),. B% S/ |* `7 R5 ?. `
    19.                 pos = pos -p,\" ?7 W& P2 C4 S6 @
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))
      ( @9 B, d9 |6 F5 ^2 `+ X& }0 g1 \7 {
    21.             }; Y6 P. |7 }9 q, a
    22.         },
      ' f2 g' D/ R  o5 x9 q3 o1 `0 m
    23.         sum++/ L2 `  G3 H+ b9 l
    24.     }
      9 k3 \# t6 _; N4 D1 O& d
    25. };/ T8 u( u0 a) O
    26. i:main(:tm,n:sum,upperlim)=
      : R, B0 w8 b) P9 o
    27. {
      2 }\" F4 J: ]6 d- e7 V) ]# s& T
    28.     n=15,6 I3 y4 i0 b% v7 K/ _; Y
    29.     tm=sys::clock(),
      8 q% o1 r4 n! j$ J0 L) W0 j
    30.     printff("Queens:{1,i}, ",n),
      / I8 p- F3 e( }. z0 E% U7 ]$ A
    31.     upperlim=shl(upperlim,n)-1,
      / J) t$ }- {  ~
    32.     test(0,0,0),- V# d; A5 f0 W/ w9 @& _: A
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)5 Q% [\" x0 X) V3 Y
    34. };( u/ q  w3 p0 Z1 S
    复制代码
    Forcal运行结果:' o# d3 i' U- Y5 l. I# b
    4 \0 F3 E8 H9 S& T
        Queens:15, sum:2279184, 59547毫秒.
    5 L9 N7 ]+ @& @( s( j8 y1 k) j. L6 ~- A3 p
    例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右7 K: b% ^# _9 M" E! U1 u
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =
      . q0 s\" `6 b% }( V7 \5 N
    2. {
      0 F0 e4 |. d. O5 X6 u/ K
    3.         cr = y - 0.5,3 o9 _/ z3 h  Z. a9 M\" w1 y, V
    4.         ci = x,5 O  C6 ]$ |, ~: r; U
    5.         zi = 0.0,
      + }  p: Z7 \; p  J  Y( k
    6.         zr = 0.0,
      # |\" d; ?\" g# G. D5 t5 {- f2 {
    7.         i = 0,; H' Q8 h8 M, B: J6 w) q# W' [
    8.         (1).while {# m' j) x% y# @5 P8 J1 B! W; m
    9.                 i ++,
      9 o\" h\" j) M5 A9 U' x
    10.                 temp = zr * zi,) C3 T/ `- E% n- p4 a; |
    11.                 zr2 = zr * zr,2 @1 W  u9 j9 {3 J: P* G* U* q
    12.                 zi2 = zi * zi,# f! U& e\" o$ m
    13.                 zr = zr2 - zi2 + cr,8 g0 M! K: R  j
    14.                 zi = temp + temp + ci,
      7 i$ K; K( W' z- ]5 f) ~
    15.                 if [zi2 + zr2 > 16, return (i)],
      9 \7 y& e. ^/ K9 p: w- {1 d4 h
    16.                 if [i > 1000, return (0)]6 j\" Y) w+ j# @% l9 V% P7 t
    17.         }
      9 N. c: M! b$ [0 P
    18.         
      ; Y) |8 w$ I. l* L4 m
    19. };: N- j. K+ X& J% e& X
    20. main (:i,x,y,old,now) = {7 O9 f% L' s& n
    21.         old=sys::clock(),+ ^6 r% t3 R; a/ b# P: Q! N
    22.         y = -39,
      ! m% T4 y3 h* C9 `\" C0 P6 p
    23.         while{  y < 39,
      ) S8 A% C7 q( m3 _+ j- p8 n3 a. ^
    24.                 printff("\r\n"),9 J3 }% _1 E& i
    25.                 x = -39,, k7 V% Y\" h/ J! `2 E& Z
    26.                 while{  x < 39,
      - V' Q3 R\" C. S7 o, V5 u) H+ L% a
    27.                         i = mandelbrot(x/40.0, y/40.0),, C2 L6 r, A0 Q$ M* H3 @, u
    28.                         which{        i==0,. g: i  }. u5 p' \3 S- Y$ |; h
    29.                                 printff("*"),
      5 c* H9 S  w  s' L$ |
    30.                                 printff(" "). L- V  s; a5 l2 ]- R\" w/ U
    31.                         },; i' a: P1 Y9 j! t4 }
    32.                         x++, w6 w. D, y- X# F$ g! s4 e\" m
    33.                 },& S( t. a( R4 r
    34.                 y++* d8 F$ S1 X/ d  ~
    35.         },
      0 ]& A6 L* l, S5 Q% N8 U& U+ B
    36.         now=sys::clock(),
      , l2 l0 N1 h4 G
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)/ r% |2 \* B( ]4 m8 B
    38. };\" F$ k5 t/ M. a* F- J
    复制代码

    , y' }! I2 H% j运行结果:
    3 Q; a/ c- f& P& a- M
    1.                                        *
      ) }  R) `9 ?' c+ i( Z
    2.                                        *0 a/ m3 K0 P8 h3 @, t1 U' S  a% ?
    3.                                        *
      / b1 B3 ^+ y( o0 a
    4.                                        *4 K- W8 t2 f, E* S0 J2 _' w
    5.                                        *% ^) u4 Y/ r0 R) c% C& j4 m
    6.                                       ***
      + @. }1 X+ t. p. k0 h) K
    7.                                      *****- x. h, L0 |\" i
    8.                                      *****: c+ |\" f6 L, g  G# {1 j8 o
    9.                                       ***
      ; I: m* @! Z3 R
    10.                                        *
      ! `7 |7 {+ K0 T9 [* }8 o
    11.                                    *********
      ; V* j0 R' M# o, ?3 w  K
    12.                                  *************
      % h- h. e  N! i: }- q. L2 C
    13.                                 ***************2 e2 z2 k+ Z/ V; v8 Y9 r
    14.                              *********************$ v. f) g; K' Y5 P; f
    15.                              *********************
      0 E0 g/ \7 d5 m) v- q( E- A( f' }$ Y
    16.                               *******************\" ], J2 }6 C, Z5 X# q, F
    17.                               *******************
      # F$ J0 H1 T2 w# Q3 m. j
    18.                               *******************
      . S( V% a/ F# ?. f- n/ X$ t# J
    19.                               *******************8 D& l8 s1 k3 v$ j3 m& Q\" G
    20.                             ************************ P\" D# y+ G' A1 X% M
    21.                               *******************
      0 p3 S2 k\" d7 A9 g9 k
    22.                               *******************
      , L) F- x8 p& I  z& y+ j- f% R
    23.                              *********************3 ]  X# ]- D) s2 B7 v8 ~% V
    24.                               *******************
      7 o: D+ e\" j4 K8 |
    25.                               *******************
      3 u9 L$ s# }  U' ?: K
    26.                                ****************** [+ T- J\" m: c3 u\" k3 P1 y
    27.                                 ***************
      ; A/ b6 M' S\" V2 N  S; `
    28.                                  *************& p8 O! }/ ^6 a4 S/ V1 B
    29.                                    *********) L1 v/ J- j+ ~- v
    30.                                        *9 |/ H\" }) r9 _* T5 m3 y: D
    31.                                 ***************
      ( x9 w1 d' o  k. K2 ^2 I
    32.                             ***********************2 g3 j6 y* F: C/ N1 ~
    33.                          * ************************* *
      + t- U3 Y! Q9 o% h3 {: h
    34.                          *****************************
      : N! K0 M% P6 ?8 M  }
    35.                       * ******************************* *\" I; P: p$ b# ~  _, l\" d
    36.                        *********************************
      ) A0 U$ m3 Z3 }4 Q& N$ ^. g; K
    37.                       ***********************************
      ! k\" F+ I9 V- y\" i: F
    38.                     ***************************************0 x1 o' H, f! o' F
    39.                *** ***************************************** ***' U5 z! w; [7 [/ Y: j
    40.                *************************************************
      / Q: F% j2 B$ `0 H
    41.                 ***********************************************: X* a. c1 y6 Z( @\" M: c* w+ f
    42.                  *********************************************
      3 L+ e  H$ F9 ^# q
    43.                  *********************************************
      * `  Z& M. x4 Y2 o4 w
    44.                 ***********************************************
      3 D  E: H/ f! Z. g
    45.                 ***********************************************\" k) {6 [7 x; z; `- K, E
    46.               ***************************************************1 M+ ]! j  i+ i6 ^
    47.                *************************************************- }0 ]5 v; ^6 C( Z8 y; o( U
    48.                *************************************************  G2 f( d3 V8 e
    49.               ***************************************************/ F4 l8 m+ [/ U( x( I7 h& A
    50.               ***************************************************
      - Q% U! \( _\" d- B
    51.          *    ***************************************************    *
      3 ?8 P* X6 c9 T
    52.        *****  ***************************************************  *****0 H$ C, }( g: |* _, |9 ~
    53.        ****** *************************************************** ******4 O1 i% ~- n9 J\" k! j
    54.       ******* *************************************************** ******** @1 z2 g: R  I/ K- ]) p
    55.     ***********************************************************************
      5 U3 p\" A6 k6 o% A' {$ T* D
    56.     ********* *************************************************** *********9 B) e* d\" @3 E& H4 m- s
    57.        ****** *************************************************** ******0 |; g9 ~5 Q3 s4 H  W7 T. F
    58.        *****  ***************************************************  *****
      0 E. n6 v+ V  A
    59.               ***************************************************
      # t+ a$ I5 B$ x2 F2 G4 g4 k
    60.               ***************************************************
      , i9 \5 a/ c5 p- k- [2 N( j
    61.               ***************************************************( W\" W9 Q+ y: y  x1 \! A; i/ _9 p
    62.               ***************************************************. [; P# q+ u# I
    63.                *************************************************
      4 n, t3 s3 ~( {
    64.                *************************************************
      6 a\" @7 B5 |, {6 [8 Q& J  T  @: ]+ p  ]
    65.               ***************************************************  `  G9 i9 q6 n3 m4 @+ k
    66.                 ***********************************************
      % ^6 `$ V/ f7 k; L6 n. v& n: C
    67.                 ***********************************************# \% o3 I) ]$ b3 d% C
    68.                   *******************************************& i- x9 m6 Z( e* f: x- q* A2 O
    69.                    *****************************************
      6 ^, ^* O5 X$ t; L9 ?& {\" |
    70.                  *********************************************' h8 ?# B& S6 J\" w) j
    71.                 **** ****************** ****************** ****
      4 `9 Z6 d% q6 X; X& ~
    72.                  ***  ****************   ****************  ***\" L) H0 ^* }' s; w1 P
    73.                   *    **************     **************    *
      9 z. W: J) e2 o( ?4 [
    74.                          ***********       ***********
      ( Q$ o! ^0 a* }1 ]\" ]$ f$ Z) o
    75.                          **  *****           *****  **7 h& A1 |. k% K; h+ a, F9 A0 ]4 H1 E
    76.                           *   *                 *   *  N* |6 o  A) ^+ O
    复制代码
    ! j1 S7 D+ E5 k" ~. O0 v
    运行时间为:. y1 |2 Z* }- O( }7 W9 |& c' }! f4 v2 Z
    ( U/ a2 [  W, H; \1 P
            Forcal Elapsed 1.0785 J; Y3 O6 d/ i
    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-5-11 05:15 , Processed in 0.446726 second(s), 51 queries .

    回顶部