QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3292|回复: 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的扩充性能更好。
    " D# E: @  T0 p% M在大量函数调用时,Forcal更具速度优势。' E3 ?6 O$ Q2 Z6 h) T" A
    以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。: G7 _- t# u# i

    ; ]! h+ Y/ a; m& F# w) X/ V例1:Fibonacci递归程序(n取40)$ M, A6 g. n! y6 }% }, I
    1. SetRealStackMax(1000);# m$ N+ C+ |5 k9 Q: j
    2. F(n)= which{
      & K1 r\" s! o/ z5 w( z; M
    3.         n == 0,
      5 X( }+ h8 u0 F1 |
    4.                 return(0),0 A2 M9 I: P3 L/ q% N' r: _# Z\" p
    5.         n == 1,
      ' o3 U5 V* C2 `' P' b
    6.                 return(1),
      ! u- W' e3 |4 p9 K9 ?. Z
    7.         return [F(n - 1) + F(n - 2)]7 j\" z( Q. }- d* w* U' w* o
    8. };
      9 `8 D, W! r5 s3 F; R0 O, L  i
    9. main(:t,n)=
      & U8 ?: e, b/ y\" M, t# M
    10. {& I. w* N+ C$ A# I5 q2 q( T
    11.         t=sys::clock(),
      9 y( ~3 q% H* }1 b8 ]
    12.         n=F(40),
      9 m6 X3 g6 J& t/ c/ [' M
    13.         t=sys::clock()-t,! {, A0 _8 C+ X, v5 ^( l9 ?
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}4 ], p8 ^8 O* D5 E9 o. `) F; W
    15. };
      3 i7 J8 E# u) H\" Y+ ]
    复制代码
    结果:
    * J- U+ D9 ~3 c) Y9 t! O
    , ~( o5 x. T  x0 ~fibonacci=102334155, fibonacci_Time=41859毫秒=41秒
    . Q/ w8 ~0 G& x/ X* k( U3 g
    0 i+ L! r9 U* {, t/ e" D! q例2:八皇后问题# k3 ~$ [& m9 S6 T1 `+ {& q
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。( }6 m) n) Y$ h9 L- ?
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。/ I/ l* z) B* i' P$ d: ?. O
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。
      * @# V) I% g- v  d\" o& K
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。
      ) M: Y3 f8 x4 h9 r+ `
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。
      4 ^8 d5 G  `2 V6 W2 o5 Q, s
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。/ d# B( J- l6 _6 h% d( |
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
      ) n- h1 k& l( p- N! f
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
      ) ]! ?' h# E4 R% n' ?1 m& x5 [2 }6 }
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。
      ) l; G8 l6 X) M( J! B3 j
    10. //Forcal源程序3 G6 r6 v* q$ F- G5 ]! m/ F# l/ [
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);! C) }% N4 A7 `1 E
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=
      ( C7 j2 ^: E  \/ y3 U  n& z
    13. {
      + _\" f\" U. e! }* S
    14.     which
      , E1 P' n# q. M
    15.     {   row != upperlim,& w. ]# J6 w  J. ]6 A' g
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},: h: F9 O! D6 e
    17.             while{ pos,% i; \- U- Z1 \2 p5 w) b  v6 F
    18.                 p = and(pos,-pos),& o: l! |# y7 n7 {3 V
    19.                 pos = pos -p,+ p7 S# y, u% b. y& y
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))$ {. _  q  Q* U5 L5 i9 y
    21.             }
        D, F! \$ S3 A2 }& i
    22.         },
      6 U  r+ Q8 R, ~0 D
    23.         sum++
      % \: P2 p( U' Y9 A) K\" q
    24.     }
      : |( Q! i8 O& L  Z
    25. };
      * l  D2 _) P( Q  y+ R7 O
    26. i:main(:tm,n:sum,upperlim)=
      5 c. Y! k) `+ n& Z: r
    27. {9 I' L7 B4 D8 ?. w% u2 e! }. [3 A
    28.     n=15,/ ]6 T4 y5 @0 c7 Q) x
    29.     tm=sys::clock(),
      4 N/ r1 m9 L. B0 S, w
    30.     printff("Queens:{1,i}, ",n),% [8 k0 f# J+ J4 H7 ~
    31.     upperlim=shl(upperlim,n)-1,
      ; S/ k# D8 n; f5 w8 H
    32.     test(0,0,0),% T% X1 B2 E0 W( l\" A. F
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)
      # e5 |& I  A) C0 Q& X
    34. };, @9 \1 \3 ]7 [5 T: a
    复制代码
    Forcal运行结果:
    7 M/ o( X- ?$ g# `8 l/ h2 J3 {  u7 U' @
        Queens:15, sum:2279184, 59547毫秒.; g, i2 F& v$ e5 Y$ C3 h* a

    6 c1 @$ F8 J( k8 Y6 @) e- z, \例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右" ~, S% H- y1 P7 U; f+ e
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =
      4 C\" L2 O% x6 w5 _6 B
    2. {: ?4 @. X+ M: `9 `0 |; B
    3.         cr = y - 0.5,
      8 v0 b\" ^5 Y\" ~, _, j
    4.         ci = x,
      ' K) Z. D, u! ?0 A
    5.         zi = 0.0,7 b3 T& A; B7 q+ G
    6.         zr = 0.0,1 R6 \( k/ _0 s2 x; J
    7.         i = 0,  f! n+ Z. O- o
    8.         (1).while {
      * g+ p9 N' M  v
    9.                 i ++,
      ! E& V# m2 q6 _! h4 S- ^: T$ H  f; K
    10.                 temp = zr * zi,2 G3 _- e/ k( U; a
    11.                 zr2 = zr * zr,
      4 d+ p5 N6 v$ X, k0 \+ `
    12.                 zi2 = zi * zi,
      ) [1 \' L( J+ f7 a& T
    13.                 zr = zr2 - zi2 + cr,& z' q$ f8 ^) t8 `' o4 ^# a6 I4 `
    14.                 zi = temp + temp + ci,2 ~2 o8 a$ M5 X: V& d- [% ?
    15.                 if [zi2 + zr2 > 16, return (i)],
      * Z9 r: T8 n$ V: g/ y, h
    16.                 if [i > 1000, return (0)]\" D  `# b0 f! Q4 h; p/ i; i% h
    17.         }
      \" u  D$ k- D+ n2 Q
    18.         4 ]& B( d  X; {8 g) u
    19. };4 k1 e/ d' i1 W/ s4 y( E. Y$ ~7 d* ]
    20. main (:i,x,y,old,now) = {
      . v) v& q: i! O1 u
    21.         old=sys::clock(),1 J% |  ^( I$ c7 W( H1 M$ `5 g6 U
    22.         y = -39,$ F6 S5 T. [) m( S8 M1 V6 ]
    23.         while{  y < 39,4 Z  ]! L0 u6 ?3 T3 e5 ], r
    24.                 printff("\r\n"),; w5 L& P9 O& O. S4 l
    25.                 x = -39,
      , ^: S& y& J. \5 X; R+ ^1 w
    26.                 while{  x < 39,0 [& w$ `- k  v/ b5 h  q' ?
    27.                         i = mandelbrot(x/40.0, y/40.0),
      4 _9 Z) f, k8 g! C
    28.                         which{        i==0,
      . Q- i. Y6 r$ }  o0 j+ B) ]
    29.                                 printff("*"),. N0 P$ g/ P' {! j8 n; h, h7 m
    30.                                 printff(" ")+ b& A* {3 n5 O6 [1 F0 M
    31.                         },* r+ p% T3 M  A9 R* f1 l- p
    32.                         x++
      ' d7 ]+ ?+ n8 ~6 ?/ O' B- J
    33.                 },
      ( L7 F( F6 R6 Y: F
    34.                 y++$ L; w' g4 O2 O+ o0 `8 c
    35.         },
      6 l( n$ F4 c\" E. I+ ?, L% A: T) L5 f
    36.         now=sys::clock(),! {, T+ v5 t' p. @
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)
      6 p# {, F5 C+ B9 B; w+ z
    38. };2 q% @' j6 W) H5 z1 Q% ]
    复制代码
    * u0 I7 ^- |) T- P
    运行结果:
    # Y7 t1 w7 O" [: O* F) R7 E
    1.                                        *1 n% v  v) a' p3 f
    2.                                        *
      0 ^( S+ C9 t\" d
    3.                                        *; G' ^- X! [  F6 M
    4.                                        *. L' W* S6 R' b6 g  @5 e
    5.                                        *; s) o, c1 X# G. b  E; R% K
    6.                                       ***- g\" z: t2 ]$ g  [6 t+ I8 A2 x
    7.                                      *****
        d6 K7 S: Z  c/ X% B2 X
    8.                                      *****
      ( R% g5 j2 S+ E) @; ]/ J) Y) c
    9.                                       ***' N6 I5 z\" a2 R\" n4 d3 k
    10.                                        *5 F. }% q0 P7 H3 q% c3 b, G1 _
    11.                                    *********
      1 U7 S* t8 m+ r6 I# G* x
    12.                                  *************
      ( g( m/ F\" S) d3 z
    13.                                 ***************6 N8 H/ c6 l- X5 `% E, i/ m
    14.                              *********************\" t! o; i* A% h* c6 p- \
    15.                              *********************
      / K0 `) {) z% w
    16.                               *******************\" @& q  L9 Z& R0 `9 P' g/ x3 [3 q
    17.                               *******************
      1 @0 J- v8 d/ }# R+ r
    18.                               *******************- e+ s1 y; G) z9 a5 Y. c* B, k
    19.                               *******************
      # ?: d4 o- w\" p) M
    20.                             ***********************
      6 a. i9 N2 K\" m6 g* {6 N- Z
    21.                               *******************6 t; i! [: B* D4 }2 M9 Q2 A
    22.                               *******************
      # p6 |; v% m' v* {, {+ c
    23.                              *********************
      . a- }- ]& ?7 B: a$ h) t
    24.                               *******************! R\" s7 o* V! l
    25.                               *******************
      , M9 t& P: b5 Q$ b0 M, T1 {
    26.                                *****************6 R8 B+ z\" z) P2 W, v& X$ s
    27.                                 ***************$ B8 k3 x; T) S: T# q
    28.                                  *************
      8 i# V4 Y' k! s\" q
    29.                                    *********. C\" ?7 Y5 Y% E+ K1 @4 L
    30.                                        *
      : G; _8 ?% n\" {8 j  A7 X
    31.                                 ***************
      ! r9 x9 Y0 e4 d
    32.                             ***********************
      : _7 u\" S9 o9 @\" j2 U; G, X3 [\" a
    33.                          * ************************* *
      9 {' p: L7 s- w- r\" G
    34.                          *****************************0 Y1 L) ^4 o9 [* d% C9 g
    35.                       * ******************************* *
      ! F8 k\" N5 c. O. X( }7 E
    36.                        *********************************! z* P% j$ X* `4 e
    37.                       ***********************************
      ; d0 A9 @' Z; y# w( L
    38.                     ***************************************
      1 F9 v/ R) q' u1 g8 r
    39.                *** ***************************************** ***
      1 G  a9 D& \( F( R% A\" q7 C
    40.                *************************************************
      0 ?. B\" Q! ^4 x! W
    41.                 ***********************************************' X' s4 C2 q\" _- J
    42.                  *********************************************; i6 T% C4 K* Y: K' l* S) A6 T; c
    43.                  *********************************************) V! ?/ v9 W. Z' x
    44.                 ***********************************************! s4 b; h4 v  s4 z. n% o& ~: j) P
    45.                 ***********************************************
      \" e/ a8 n8 g( t0 k
    46.               ***************************************************7 s\" c0 i& C5 U! B0 E
    47.                *************************************************
      ( O% E\" ^0 ~& M0 F: x\" @& h
    48.                *************************************************, l$ z0 g$ u- H$ ]: u8 k& M
    49.               ***************************************************, K3 z6 G0 `\" j$ U9 ~2 ?: o
    50.               ***************************************************
      ' M$ U+ @- g2 U
    51.          *    ***************************************************    *7 z. i9 }9 y- D* `2 d) Q+ M
    52.        *****  ***************************************************  *****
      + Q! h# Q) ]' F, f0 p+ \: O
    53.        ****** *************************************************** ******
      ; M! g. H  w\" B7 h& b
    54.       ******* *************************************************** *******
      ! H# w4 I* s/ x8 k
    55.     ***********************************************************************) [& ~; k( u) G  Q\" X3 }; j& W\" t
    56.     ********* *************************************************** *********
      5 j7 _& `0 V! k  v
    57.        ****** *************************************************** ******
      0 [( G0 a8 r# [( Q* g2 A, y0 C- |
    58.        *****  ***************************************************  *****
      4 J( I$ s$ v3 S6 g4 \) X
    59.               ***************************************************
      : L; w! {) ?# G
    60.               ***************************************************
      - S\" [8 T! x/ i8 Q
    61.               ***************************************************+ a. g' X* s/ u1 J1 t
    62.               ***************************************************
      5 E  X\" G# R  @
    63.                *************************************************
      8 M6 l% ]\" r7 Q  P, b: k# ^! G
    64.                *************************************************
      : ]0 |. d6 E) R; R9 L$ T/ K: _7 \
    65.               ***************************************************
      2 ]. f9 \6 U4 u( ^! F
    66.                 ************************************************ O\" M8 g+ D6 u4 r
    67.                 ***********************************************% f: j  A# \4 T, R* \  E
    68.                   *******************************************; W9 H% T1 A: k
    69.                    *****************************************1 ?0 F4 B9 [: S9 Z! i
    70.                  *********************************************
      - V3 ]+ C5 h9 H4 a
    71.                 **** ****************** ****************** ****, Y: D9 n5 @5 Q( ~! K$ C7 l/ S/ z  k# g
    72.                  ***  ****************   ****************  ***
        O/ Q! n2 Q9 U8 Z0 j: ^: J$ j
    73.                   *    **************     **************    *
      & R% g1 U( C, U/ x: o
    74.                          ***********       ***********
      ' I: U0 G1 R# `1 n\" k8 K
    75.                          **  *****           *****  **
      3 J7 e1 e  s/ o* V3 H- D/ Y
    76.                           *   *                 *   *3 z; d/ l1 E, m9 w. y* J! q2 }
    复制代码

    6 |: ]7 Q* W' i# D( V运行时间为:
    3 d5 F. z* Y: g6 e% Z5 b5 D& ]9 X) Y# p4 ]9 E; h& R: O9 ~& n
            Forcal Elapsed 1.078
    1 ~+ D! T+ R7 w+ w0 w" L7 j/ J" U# I  k
    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 05:50 , Processed in 0.428171 second(s), 52 queries .

    回顶部