QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3245|回复: 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的扩充性能更好。
    + A" w( F+ y: z7 y0 q0 z在大量函数调用时,Forcal更具速度优势。
    / u* W: r! J% Q- N0 z( l以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。7 w% }3 P+ ]. z) Q) \
    3 t: K" ~/ H, I* V. f/ X
    例1:Fibonacci递归程序(n取40)+ ]+ }, ?$ M5 v$ n
    1. SetRealStackMax(1000);
      ! O* T8 O8 m5 ~- U+ z
    2. F(n)= which{# ], k$ m- r, f$ M- ]
    3.         n == 0,
      ) U' t2 t* M  @6 ~* Q  y# H# R
    4.                 return(0),
      ' g: o) }: `! l$ u8 F$ O: }
    5.         n == 1,4 @\" Y/ \0 B4 x7 Y\" [1 u
    6.                 return(1),( `- s\" F4 j0 W5 V
    7.         return [F(n - 1) + F(n - 2)]
      5 u( s. K/ ^' F( q) u1 O6 f2 \2 j
    8. };- C( m\" W9 M5 J% A4 C& Q7 L
    9. main(:t,n)=
      \" B! X, c. q7 O) J$ b
    10. {+ s8 s\" C- F% b6 }+ s) ~( ^# N; F
    11.         t=sys::clock(),
        v# @' {* i( p4 k' h- a3 Y) ^  F( u
    12.         n=F(40),8 ?1 F% R+ x2 {\" I5 ?( N3 [
    13.         t=sys::clock()-t,' m6 J- \5 r7 W0 O# `9 I. S% i
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}) W; m3 a6 t+ I0 x+ \0 _/ w6 K& d
    15. };
      5 K- \( `* |4 y( e; p( F( A
    复制代码
    结果:
    $ d: e: r, `" o- S& v) B# X* l- r7 y* Z3 T% @' C/ W7 s3 n
    fibonacci=102334155, fibonacci_Time=41859毫秒=41秒
    : [; t' P0 J3 @+ [* G, `0 M( A7 l0 E" z! r! p" u  b) r. U
    例2:八皇后问题2 k; y9 a( E' N' ]# e' \# J+ d
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。$ T7 G* Q, n- L, d) a: c6 E
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。
        V9 o# E; _( ^
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。
        n8 t( j. E0 B. d* u
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。
      & {. y' L  W: d0 I+ m! t9 X/ |
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。. l1 `. @\" i- Q- T, W3 I& Q
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。4 @3 l6 ~$ V+ |4 ~
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
      ( D8 R  C, M( C. B0 ?
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。& S0 ]. Y! m  }/ G, c6 o6 C
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。
      ( a. l' p3 K7 F$ e
    10. //Forcal源程序1 a. U5 s' n# E3 _0 w
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);5 S! h' M  p- J' m4 [! b/ j  O- h
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=- E! J1 v) L. X- u; @2 D; w6 q
    13. {0 f' j& z5 p1 F) A7 U9 Z
    14.     which
      \" V, k! S; ?* q1 \1 `4 ?* M# B
    15.     {   row != upperlim,
      ; Z7 v2 q, G2 V( ]1 ?) b; X( v
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},
      : r% g3 q& ^6 l  P; G
    17.             while{ pos,
      0 F/ ]\" d- u* U4 v0 u- t
    18.                 p = and(pos,-pos),  {3 C3 j. L5 v* `
    19.                 pos = pos -p,\" o9 B0 [0 x2 x( F' ]$ @+ L- H# G/ @8 f
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))! T3 ]% y! Y# _' ], L3 z
    21.             }) H, U# d\" m) M5 t0 g/ f
    22.         },3 x- U8 e, {7 z4 H$ y: k0 q7 e
    23.         sum++
      + N. o/ I\" n  Q5 l
    24.     }
      , C4 C4 D% Z+ {6 x5 Z
    25. };; A9 j+ z! V9 u\" E1 ?& [, U4 D
    26. i:main(:tm,n:sum,upperlim)=
      7 W) ~1 [/ g6 q! ]
    27. {
        b  T\" s& A9 t7 n3 X1 B4 G
    28.     n=15,1 c! X+ r1 ^! @
    29.     tm=sys::clock(),9 f. m: [  _2 u! e\" e4 y) P5 Z  t
    30.     printff("Queens:{1,i}, ",n),
      ! c/ ?  M\" Q+ M+ w. I6 {
    31.     upperlim=shl(upperlim,n)-1,
      & l8 m4 b$ |2 b
    32.     test(0,0,0),
      & g) M* A& V; I+ A# |\" z& E  Z
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)
      ' M\" M- t) @# F  \
    34. };6 K7 u, |1 z( O3 o+ D! h, P: Y1 l0 B1 h
    复制代码
    Forcal运行结果:
    3 C0 @+ A% J7 ?% c% z
    ) P* l+ ]# S  `+ U    Queens:15, sum:2279184, 59547毫秒.- Y  ~, r) J7 y+ G- q  b
    6 k$ m9 ~3 o3 \- d; ?
    例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右
    $ W2 W- g  v2 v
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =
      ; h6 H* N# R  c+ ?& V3 _) m/ s
    2. {% H4 k- f! n+ g\" k, K
    3.         cr = y - 0.5,3 d: Q; k+ J3 M1 M7 u
    4.         ci = x,
      3 ~) G  V0 p' `0 r# H7 b
    5.         zi = 0.0,
      # E0 G: J0 }9 R) z+ W( Q
    6.         zr = 0.0,
      5 y& O  y, k6 m. K5 b( Q
    7.         i = 0,
      7 C: z1 f: P: r6 I# R. L
    8.         (1).while {
      \" [0 b5 L. Y& e; A2 _8 u
    9.                 i ++,) m/ D; E1 z\" N1 K
    10.                 temp = zr * zi,1 w( k' H( M8 S3 }. e
    11.                 zr2 = zr * zr,
      . Y8 e2 n! o9 \, ^  S  j
    12.                 zi2 = zi * zi,
      # q! y. H, b# q' E7 q; B
    13.                 zr = zr2 - zi2 + cr,) x4 j0 a7 e! `: J+ q1 y
    14.                 zi = temp + temp + ci,
      6 e7 {% `% a* d
    15.                 if [zi2 + zr2 > 16, return (i)],
      5 ~6 M1 F! I! }1 F3 m6 n8 l; m7 r
    16.                 if [i > 1000, return (0)]# C5 g  X) w6 A4 s7 z
    17.         }
      , \1 R; }* O: ^$ l/ I\" |9 U5 h& w
    18.         
      , M; K2 b2 S\" f) y
    19. };
      4 [7 g  M& |% Q) }4 v
    20. main (:i,x,y,old,now) = {
      , C+ _5 o1 y5 }' u4 ?
    21.         old=sys::clock(),4 Y! k# f! A8 b7 r8 x, W2 m
    22.         y = -39,7 `* g& f* m+ r5 L! N
    23.         while{  y < 39,+ z1 \: A+ f. `# J8 z
    24.                 printff("\r\n"),/ a9 U! w: \: r, }3 r
    25.                 x = -39,
      . m: W% I: K\" P4 O\" ~
    26.                 while{  x < 39,
      ' h& h! h4 _  X; M; y! p3 @: f) D
    27.                         i = mandelbrot(x/40.0, y/40.0),- d5 t$ n7 `' [! O3 d! b
    28.                         which{        i==0,
      $ i! j; {8 P1 B\" p9 ]
    29.                                 printff("*"),
      ; E4 a8 M0 L+ X5 E3 r
    30.                                 printff(" ")
      3 T0 i* `( p2 [\" Q
    31.                         },
        U3 v\" w: J  D1 n. i% ~5 I, P
    32.                         x++
      ; P* D, z1 ]9 _. e: _3 _
    33.                 },
      . ^. n8 X2 {7 L3 Z6 E: [, X# W# L7 g3 y( x
    34.                 y++: b, ]! Y7 X. {0 u
    35.         },\" [. |, N' G& d  S  s
    36.         now=sys::clock(),
      : ~; I\" C; a) d3 H3 A! q& t
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)
      ( M* N% h& V3 Y. G3 v; i
    38. };
      ; m; U' X; p/ c, v: G9 [
    复制代码
    1 Y8 m" E9 f1 t, u4 N, i
    运行结果:
    ) C) Q  t5 e; C5 G  n) y2 P. A
    1.                                        *
      0 s9 s& A. V; J: w. t
    2.                                        *& y1 `2 w7 R+ P# }) [
    3.                                        *
      4 Z8 c3 Z) [5 N\" m9 P
    4.                                        *% n8 I) p( j' X; f# Z' p2 X& c
    5.                                        *
      # {  Z! q& H7 ~
    6.                                       ***) S& p\" S6 N0 v0 y9 R5 B+ q
    7.                                      *****
      ' T; v, y: R( ]% X3 x/ k
    8.                                      *****$ U4 ^- L+ L! x
    9.                                       ***& L2 K5 h0 ?3 A7 C2 |4 f
    10.                                        *\" M' B9 ^' d& m
    11.                                    *********8 t' k0 t4 X( s
    12.                                  *************
      ' O! N9 m: X' v# T8 n
    13.                                 ***************
      6 _0 ^4 w5 e, q: O  O2 T% ]6 F1 d! D
    14.                              *********************
      8 X% M3 e* |9 H
    15.                              *********************! X\" \4 _  v* i1 A) w; w# t
    16.                               *******************
      # `( @+ [. ~5 {; P2 X. y
    17.                               *******************. X$ K: F/ C% ?3 R: I# |
    18.                               *******************+ M3 v& f. {3 n  g& c1 j# }
    19.                               *******************5 ]. n3 ?! e- k$ B
    20.                             ***********************7 ?' J3 Y7 D) g6 z- T
    21.                               *******************
      ) `$ X, T: ^* U4 U2 _( C: U, l
    22.                               *******************+ j8 z/ g! r- n  X- ]0 e
    23.                              *********************\" }1 Y. A6 w5 c' }) Q
    24.                               *******************+ C) g8 q# e! u# k9 n$ [
    25.                               *******************/ c7 F; T2 o% R& C4 r  O
    26.                                *****************
      / @5 M8 Z5 i; q4 M
    27.                                 ***************
      0 Z% ?1 l/ \  o+ p
    28.                                  *************+ t9 g3 k\" S% U- i
    29.                                    *********/ _. @) v$ J: E1 j: H: T2 x
    30.                                        *+ i2 |, ^, g* z* v  u% x3 w) G' Y
    31.                                 ***************
      - \1 [, R* c; N0 k
    32.                             ***********************& @\" l8 N4 f* V4 _1 Q4 \
    33.                          * ************************* *
      & |; M\" i0 N) B
    34.                          *****************************
      , D- u1 [3 }. l4 Q5 ^! J' _% A
    35.                       * ******************************* *
      \" I9 i\" D0 h. V0 }. {! W/ G# s
    36.                        *********************************- n5 O# c4 g% `9 w$ {
    37.                       ***********************************4 z% W( t; U/ j( v, K# @
    38.                     ***************************************: Q# K) D8 j4 n; {2 Z$ R+ [
    39.                *** ***************************************** **** [: @; x' \9 {
    40.                *************************************************# \( u; s+ [9 u
    41.                 ***********************************************) H/ {( |$ ~9 L) M( ^5 I* q
    42.                  *********************************************
      9 V5 T4 v  f8 c' B7 b
    43.                  *********************************************  H$ F0 e# `. L) D) s
    44.                 ***********************************************\" M. [, K' v3 Y, V
    45.                 ***********************************************
      ) L- L+ L! @2 d# A! ?0 {; [5 q% B
    46.               ***************************************************
      * o1 C* O: e+ c2 @/ H  J
    47.                *************************************************
      , I: b' y+ `, `. G/ X! Y# N6 q$ ^2 r! _
    48.                *************************************************# _5 V0 E/ f4 M6 p
    49.               ***************************************************
      . X. v$ r3 n\" x0 ], E\" x
    50.               ***************************************************
      2 w6 i) _! z6 N! A
    51.          *    ***************************************************    *# Z, U6 O4 q1 i* X
    52.        *****  ***************************************************  *****
      ( y% W2 H  `, o9 w
    53.        ****** *************************************************** ******
      , M\" z2 n. ^$ D\" ?  [4 n. ]7 E
    54.       ******* *************************************************** *******
      6 t4 c* }* v: L+ T* k4 R- B
    55.     ***********************************************************************
      # ^- E; D$ J9 i/ i' V& K+ z) ^1 Q
    56.     ********* *************************************************** *********8 ?: A# @( Y9 u! b/ D. ]
    57.        ****** *************************************************** ******2 w9 g' O) L: b8 D$ ~9 t/ G/ @& O) V, A
    58.        *****  ***************************************************  *****
      9 \* G( w9 j\" F1 j6 U2 q% F
    59.               ***************************************************2 F% x0 P# i5 }! X# i
    60.               ***************************************************
      4 o* l0 J, q0 d* @
    61.               ***************************************************
      / C, K9 p1 l; x' g4 Y& I, |3 P
    62.               ***************************************************
      & R4 C* n2 }! V- C% O! \# W
    63.                *************************************************' o* Q0 e7 Q. n2 ~7 {
    64.                *************************************************
      ; t' U3 M# b3 Q* y4 P3 Z
    65.               ***************************************************0 }7 d, i2 t9 o# _4 s! D* c. e
    66.                 ***********************************************9 A3 f1 T) e' i* K' r8 W/ F
    67.                 ***********************************************+ F8 ^* k1 `' n- A& E  ~
    68.                   *******************************************
      $ K% C5 l\" Z5 x* h0 k
    69.                    *****************************************- Q9 k6 @\" ]2 q2 n6 t( E
    70.                  *********************************************$ Z' M9 Y) y\" j1 o  A0 G0 _
    71.                 **** ****************** ****************** ****
      8 M$ z5 F4 Q8 j4 Z8 _6 _
    72.                  ***  ****************   ****************  ***- c* H. S4 b, g3 M7 m
    73.                   *    **************     **************    *, n$ j) y8 q* Z; e
    74.                          ***********       ***********1 M% f& ?( F\" c2 F
    75.                          **  *****           *****  **& ^2 I6 L# Z. W3 n& l
    76.                           *   *                 *   *
      % F1 e' O+ c- @# M
    复制代码

    ' f! c4 Z& c% K/ [8 g" @运行时间为:
    3 C' Y# H2 H# e8 f4 e) v
    ; Y, K: `7 V4 Q* m$ ^* a, K        Forcal Elapsed 1.078
    $ l  ?- B9 o/ a& o  }4 i/ s) H9 g
    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-6-11 06:49 , Processed in 0.325148 second(s), 51 queries .

    回顶部