QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3217|回复: 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, _! R- s& z1 B7 W: i在大量函数调用时,Forcal更具速度优势。
    & h" f3 h: l7 ]5 y以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。" k+ b! D# b2 p; Z; J5 @% {/ K8 a1 T- g
    2 n* j8 H9 f. l- j6 u3 p+ T. w7 I
    例1:Fibonacci递归程序(n取40)
    ) j6 v0 n+ X  [  q0 G
    1. SetRealStackMax(1000);
      ; U- X\" Y! e+ a1 F4 j0 _
    2. F(n)= which{
      - r; s  f* l\" j8 h% J4 j  l& P
    3.         n == 0,1 G6 d. [. a4 o: S/ \
    4.                 return(0),
      - {1 h! c, x, R# Q4 B2 @
    5.         n == 1,
      . D+ a6 r: p2 R) ^# @
    6.                 return(1),
      ( B& h* r2 C0 @7 r. k1 ~1 @
    7.         return [F(n - 1) + F(n - 2)]+ N4 r1 d2 |. c( t
    8. };
      ; h, q! A: e5 d' u0 v9 `
    9. main(:t,n)=; X( K' m4 P3 Q/ U! _
    10. {- I5 A; N; O) K, n4 m$ t6 l' |# v
    11.         t=sys::clock(),
      2 `2 O; L7 U4 z. D0 D8 Y
    12.         n=F(40),: \/ e\" f1 {5 @
    13.         t=sys::clock()-t,
      : T( ]0 d( I0 |# q6 e7 H
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}, `/ r  |2 z8 ]0 f
    15. }; ) Z, X, n* \0 T0 _6 X
    复制代码
    结果:" Q4 Q) f3 b8 Z; ]1 M- M

    4 R( r$ s" H3 Ufibonacci=102334155, fibonacci_Time=41859毫秒=41秒
    ' A$ @( x/ M7 G4 F2 w. }& Q; c
    3 i: `1 n( x8 C  X/ j例2:八皇后问题& Z6 {8 a2 [, v- V8 ?& F
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。7 k( d1 }' U, P8 Y
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。
      / V+ ^' r4 W2 q% T- {$ X
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。
      - v0 C( p$ w\" q
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。
        L. l+ _* T. D! j, \$ d: F: e
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。) j4 W- Q. Q2 R9 b
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。
      1 m\" |+ T, L6 s* h6 @, U' N, w
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
      ; |) a* T$ O! c5 x2 @6 n
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
      2 Q3 e7 \7 n- V  b0 d: u' _. R1 `
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。 7 P7 T6 j5 `\" n% z) l
    10. //Forcal源程序
      \" j- u2 d1 d' I( {
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);
      8 z! u$ S5 o6 i; V( c+ C
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=2 h! x( s2 ~$ j% E; x6 S: Q
    13. {
      % b9 r0 @- E  {1 R0 h
    14.     which
      - r6 R- u/ {+ o8 d6 Z. T
    15.     {   row != upperlim,
      ; L8 d+ u3 V3 i\" H: z
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},
      , n2 l; o6 I% c8 c
    17.             while{ pos,
      % V4 ]* {, ^\" p7 f! b! O9 L\" a
    18.                 p = and(pos,-pos),
      ) u9 D$ p0 b3 G+ r& s8 r\" Y8 y
    19.                 pos = pos -p,
      - K  v8 R8 k; w+ l# m
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))
      ( H2 A) O$ G$ s* r
    21.             }) n# J: {. t6 k, t  A1 w( |
    22.         },
      % v\" v5 F3 Y2 G0 T( G  B* a' g' P! j
    23.         sum++
      ( e0 E2 n, H* j5 C( l: B3 I* C/ r
    24.     }
      0 u' Q1 Z' T; f
    25. };, `\" \& h0 {1 A
    26. i:main(:tm,n:sum,upperlim)=$ T0 i: b. n3 ]+ v  ?
    27. {
      & n. B: Y+ o' f0 N
    28.     n=15,0 F9 I( O- N) h
    29.     tm=sys::clock(),
      6 J! X, l- N3 {' W7 \( K# i* P( J
    30.     printff("Queens:{1,i}, ",n),
      ' \, T( ^2 ~# \) Z+ V9 ~
    31.     upperlim=shl(upperlim,n)-1,
      ) F! |! g7 g8 A- ^) c
    32.     test(0,0,0),+ ~6 p4 b% T* d
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)5 X# s. h# Z3 Q4 a/ h& C
    34. };
      7 L; M9 S. y* E( g9 m
    复制代码
    Forcal运行结果:0 `" q& w* y5 o  ^* `7 _6 Z- r( Q& s

    , H% i/ Q# ~5 A& s- X* @( t    Queens:15, sum:2279184, 59547毫秒.
    4 g$ `- y+ W2 [& f5 r
    ' f4 P) v1 Q% [0 i例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右
    2 J& f. G% V( ?! \( @
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =$ L- r4 [/ Q\" f. u7 k* H% W2 y
    2. {
      4 ^2 U6 e: H2 F% L1 d: [6 j5 |
    3.         cr = y - 0.5,
      9 R* R8 s: |$ H. c9 z) d
    4.         ci = x,( k, e6 G! j6 Z2 X/ v7 u6 y% V8 A
    5.         zi = 0.0,, p6 W8 b\" H' I; v& @4 {
    6.         zr = 0.0,& r- }2 P& o$ i( K: m& n* ~9 W/ r' w
    7.         i = 0,
      3 H+ _\" H; Y; `1 c7 M7 G
    8.         (1).while {
      9 G0 @, r( V, ?
    9.                 i ++,2 u. p! I8 K6 h- S* l
    10.                 temp = zr * zi,
      0 q! k1 @( O2 |( s
    11.                 zr2 = zr * zr,
      : A, F  ?1 [1 j* i9 X2 U  I. z
    12.                 zi2 = zi * zi,
      ! G( W) Y+ B4 O4 E. c
    13.                 zr = zr2 - zi2 + cr,
      1 o! F) s' v0 c) K0 b3 \. {+ {: e  g
    14.                 zi = temp + temp + ci,
      7 H* ^! {* ?/ h; S: w  @
    15.                 if [zi2 + zr2 > 16, return (i)],) x( {; b2 i\" R
    16.                 if [i > 1000, return (0)]
      8 D, O. \  g4 b& |, A
    17.         }
      + _* ~! k$ Z: m
    18.         
      . ^1 p% I1 |! a# R, M$ V, E6 t
    19. };. ~1 N; x# G2 E9 k
    20. main (:i,x,y,old,now) = {, M' E& _7 V! L; S4 p
    21.         old=sys::clock(),$ s, g9 M: U$ y& V0 \3 S: {' N
    22.         y = -39,
      2 T; c  N0 n\" C& L3 l
    23.         while{  y < 39,. t2 L# E+ {4 p8 ]( Q8 A/ s
    24.                 printff("\r\n"),8 ~9 s; ?, o+ d; U2 ~
    25.                 x = -39,
      2 l. m# ]8 M) K/ [* `\" a
    26.                 while{  x < 39,5 J0 T4 N1 S& e. ~: v9 [
    27.                         i = mandelbrot(x/40.0, y/40.0),/ B5 T, N2 F, r( H9 R6 ~( R
    28.                         which{        i==0,3 a) O8 ]0 w5 V1 r# p* Z# @
    29.                                 printff("*"),5 h1 e8 @& d7 T5 |# x$ _
    30.                                 printff(" ")) I% a. k  ~% Y/ J: @
    31.                         },
      8 F9 }' ~7 @5 P/ r0 n% T
    32.                         x++
      3 O$ K! K6 @  G9 i8 U
    33.                 },' c. x; J/ L9 }
    34.                 y++
      $ v; \7 w% w: @% P
    35.         },  N4 F7 _# K% A1 b
    36.         now=sys::clock(),
      % D5 [\" R3 e2 K
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)8 q5 n2 F* y, n
    38. };
      3 `3 v3 }0 G# }- z0 J/ X) |
    复制代码

    / a% q* k, T* K5 D6 _! @运行结果:
    6 g; G+ N- M  l# P  B* x& s$ `
    1.                                        *, ]$ F( W( \7 S% N, g
    2.                                        *5 J( }$ x) C5 Z2 o6 I/ x8 a/ A
    3.                                        *
      9 ~+ \9 k0 ?+ v& }
    4.                                        *. Q% \  g: e- m. G
    5.                                        *. j% o( l\" v6 x( G
    6.                                       ***: e' n/ `% A. G& Q
    7.                                      *****: }: k7 y2 U5 F; O
    8.                                      *****! f, ~; u. c* q) q
    9.                                       ***# S) p2 w; {1 l9 Z9 F
    10.                                        *
      4 U1 B4 w( d/ S8 U! X0 I* z
    11.                                    *********4 V( O- S' w  [1 _7 r
    12.                                  *************
      1 M) |/ t\" w4 ^# V. g
    13.                                 ***************. Y. _, |( F3 Z* x+ {- d
    14.                              *********************; B% b) }5 C! R- r+ Y
    15.                              *********************
      , \1 k\" {. S2 B- `4 S4 t4 `
    16.                               *******************3 Y, j% d# C! W2 a+ W5 {
    17.                               *******************; L5 O& S3 T) Z7 ?' ^\" n: F
    18.                               *******************7 |' D) b. K; R1 w& W+ Y
    19.                               *******************! W7 Y: K! |- a/ u- u2 m7 \
    20.                             ***********************
      / Z0 M1 a& m5 g& T# s\" C3 \
    21.                               *******************5 [' g+ K4 `) s$ X% ^7 _
    22.                               *******************& x: L, c1 L9 i! N\" T6 u5 f  ^
    23.                              *********************$ e6 {\" u1 o2 C) o, c3 h) {6 E
    24.                               *******************- k' V2 r! S+ \$ n4 S2 W
    25.                               *******************, d+ l, c+ J8 l( P
    26.                                *****************
      % V* d9 `+ a: B( r7 F/ t2 F
    27.                                 ***************\" ]- L1 p0 l& f% f
    28.                                  *************
      $ N1 Y% {9 y2 a$ ~) b
    29.                                    *********
      & E( y% G/ [  N& x
    30.                                        *' H: ^& e3 }; t7 j4 |
    31.                                 ***************
      ( _8 \. |. t2 G4 w& M
    32.                             ***********************' w5 H' x5 H% M5 T
    33.                          * ************************* *7 k& v\" l) ~4 Z
    34.                          *****************************
      + ^: W' g% o  B  L
    35.                       * ******************************* *' ^7 s& K& Q& A. M* s3 O
    36.                        *********************************
      4 c0 x1 K  D, z\" P4 X# @
    37.                       ***********************************/ f5 x' g+ [: }: O
    38.                     ***************************************5 s! |: G2 ~# A% N
    39.                *** ***************************************** ***
      - [8 k+ M* m\" N
    40.                *************************************************
      / \: O$ l$ O2 f1 i
    41.                 ***********************************************
      : K% ~2 i+ n( e
    42.                  *********************************************; f& E& Q; Q, `8 n! P# @' e
    43.                  *********************************************+ l0 C% \) C9 _% c) a0 e\" w7 P0 [
    44.                 ***********************************************3 ?0 K4 y/ D\" Q+ @! ?4 a
    45.                 ***********************************************0 }$ {/ l5 o9 P( P+ P1 V) @, k
    46.               ***************************************************
      1 j' `; o/ L  m. s1 X, U6 c
    47.                *************************************************
      : Y2 r7 C* a; k\" C3 ]. a. D: c
    48.                *************************************************
      : D# i# }+ }% u2 G  j3 e
    49.               ***************************************************  R  K( e1 T) p  S
    50.               ***************************************************- c* t\" v9 @( Y3 [4 H5 G
    51.          *    ***************************************************    *
      - G/ B' t2 {2 n: ^
    52.        *****  ***************************************************  *****2 `& u4 O  B3 Q\" V: l) n+ M
    53.        ****** *************************************************** ******7 M, h\" m0 X% z# l+ C7 y
    54.       ******* *************************************************** *******7 _, b8 V6 H1 L& f8 `* y
    55.     ***********************************************************************6 e8 Z+ z* D0 C\" O2 ^# k7 d- E  z
    56.     ********* *************************************************** *********6 ^\" b( ?- O  F% {7 Q. l8 {
    57.        ****** *************************************************** ******- s1 [# a  d$ k1 v/ n. }# o
    58.        *****  ***************************************************  *****4 J* Y+ N3 S+ R$ a% m- h
    59.               **************************************************** H/ I- o\" P' [
    60.               ***************************************************
      8 O1 P% U5 a0 e\" G9 G  `
    61.               ***************************************************' r  I. C2 }; d0 Z. j9 n
    62.               ***************************************************
        Z9 |+ V: E1 X# q9 g: `9 R
    63.                *************************************************
      \" E8 |  \  w9 f$ N. P
    64.                *************************************************
      \" s/ a* H0 {, {
    65.               ***************************************************, R: |3 R& J. {; i- {4 d$ m7 |
    66.                 ***********************************************
      / ^+ l) k( |  j- G
    67.                 ***********************************************0 r: O, q7 d# Q/ [\" e% @8 u. W
    68.                   *******************************************7 k* p/ Y$ w! z, U
    69.                    *****************************************# Z3 D3 i/ H4 [9 v
    70.                  *********************************************4 K: Y5 A; G; \: }: Q! `0 @
    71.                 **** ****************** ****************** ****
      ; ~: g' ?- n! {\" K  b
    72.                  ***  ****************   ****************  ***! k6 \- m! i; G. {
    73.                   *    **************     **************    *
      4 x# J- C) H' T# {\" K& u
    74.                          ***********       ***********' z9 a7 i5 {# i/ S: D; }
    75.                          **  *****           *****  **
      % R  e( O) a. x8 v
    76.                           *   *                 *   *
      1 ~. [% n* V  U\" ^: G9 x
    复制代码

    7 l9 R2 |0 M' y% w. W& m运行时间为:) N: |* J2 x  Z3 E0 c8 o

    1 `# g$ L% }3 t/ o* l( R" d; T" F        Forcal Elapsed 1.0783 R- P% x1 ~# c! |7 c/ ?4 \5 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, 2026-4-19 21:17 , Processed in 0.411797 second(s), 51 queries .

    回顶部