QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2799|回复: 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的扩充性能更好。
      y$ h& L6 P* o1 h5 w! k8 @在大量函数调用时,Forcal更具速度优势。
    % [" G6 L3 C8 T; o* Z: ~以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。; h/ V$ }- ^. x9 L. j
    / `) q8 O: ]( c( X, `6 ^
    例1:Fibonacci递归程序(n取40)( p. L" o/ `6 \
    1. SetRealStackMax(1000);
      + S1 N2 k0 P# ]- o\" p1 ^! f
    2. F(n)= which{
      ! J: c1 `- a- `) n
    3.         n == 0,
      0 U, D  a, e5 N# q/ p
    4.                 return(0),6 C( s% Y7 _3 x4 v
    5.         n == 1,# L' U% X6 x3 c! F7 V# y
    6.                 return(1),
      1 _: f$ @2 [! R( a\" a* H8 n
    7.         return [F(n - 1) + F(n - 2)]
      ( M5 n1 Q7 ?+ j; M  C8 G* g
    8. };
      0 K6 a% O( Q' y& s! q
    9. main(:t,n)=5 f; `% I+ M9 Q- g& b$ S; x, |- u
    10. {
      ' n4 `8 ^( R( G( k
    11.         t=sys::clock(),! ^: C3 u! X; s9 c2 J
    12.         n=F(40),& `. J' E' [. l1 u\" w& {2 o4 d
    13.         t=sys::clock()-t,
        a6 |, H/ }' e3 Q9 z( v) Q! \% g
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}4 _6 o3 C. O* Z. X
    15. };
      9 e2 b6 i# L- H$ V
    复制代码
    结果:( e% t! P- E7 d% J

    * ]5 O) b/ V) pfibonacci=102334155, fibonacci_Time=41859毫秒=41秒
    " S$ O3 r# x; A+ z6 z1 l$ F
    2 ]6 x9 n+ T0 i) A& C  S$ W例2:八皇后问题
    5 X4 }7 Z% o! d9 b5 G# C) ^  Y
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。
      4 `\" d5 c# s0 T. z; y
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。
      9 Z6 m6 ~/ N\" j/ s0 ?' ^
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。
      7 y8 s# O3 ]' l  C8 C1 g+ ~
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。
      ' t2 G6 F\" X; v. ^( ^
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。8 j8 M/ f3 `& W% Q0 C3 r\" d- e- ^
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。
      3 ~7 s\" `, ~4 D6 X3 ~
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
      ( D5 P6 g/ P! F/ f  p3 S2 J5 ~- N
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
      8 d6 Z& M  c* q3 Z
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。
      $ {; A8 s% i* I
    10. //Forcal源程序/ l# H9 @5 B; }2 o
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);1 z& u4 C+ x* V# Y
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=. I# Q$ k! c. ~: {
    13. {7 L/ d* L\" ~: e0 c: Z
    14.     which\" [5 B5 P/ G, \8 C  p% z; E) |
    15.     {   row != upperlim,& v& Z& g8 M& p2 W
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},
      1 k) t  _( [% @0 V- j
    17.             while{ pos,  M; ?* |8 q% @
    18.                 p = and(pos,-pos),$ c7 D9 {1 V% ]2 m
    19.                 pos = pos -p,* x\" Y1 j% j/ \, b; e- ]
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))
      ) o- G7 g) ?* \+ U
    21.             }
      4 \\" c2 a; n& g% [
    22.         },- ^; `5 }, ~+ @. R
    23.         sum++
      + W7 e8 i6 p) u
    24.     }: O1 c8 G6 ^7 I' J) Y
    25. };
      \" u: A$ V: N  L# P. k. h4 X
    26. i:main(:tm,n:sum,upperlim)=$ O; h  w& S/ b+ O4 G: v% D
    27. {* H$ t9 Z' i+ f4 Y% h\" Z* l& @1 a
    28.     n=15,
      ( @4 X1 V\" |1 C: c( f
    29.     tm=sys::clock(),
      6 x1 L. H$ P7 T# z& v3 N
    30.     printff("Queens:{1,i}, ",n),
      6 A- O% z3 L6 o; }' f  h
    31.     upperlim=shl(upperlim,n)-1,. K* U) p+ r4 z2 E8 i
    32.     test(0,0,0),5 m\" p( @5 P% u5 m/ i0 l- h' d! Z: i5 K
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm), V5 d( K: h; v: b& q
    34. };5 O) `; M! ]* Z4 T
    复制代码
    Forcal运行结果:
    3 g. p7 N, L1 D% e# ~2 F% n' j% N$ v: |7 I
        Queens:15, sum:2279184, 59547毫秒.4 K# b' c0 }/ k0 O1 b
    ) i( D* H/ X; ~1 H0 z. l: U
    例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右
    ! g8 Y  c9 u$ @6 C* I' K$ L
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =
      , E' @7 W! v, j0 ?\" h5 I% T1 C$ H0 b
    2. {6 B- a! H* [# Z9 P4 Z
    3.         cr = y - 0.5,
      $ `( D, D! S7 e) `
    4.         ci = x,
      $ G6 _* _& B& R+ d
    5.         zi = 0.0,
      7 a0 t8 b$ H* X( q+ O1 ?9 e
    6.         zr = 0.0,* I: V2 Z/ {6 q
    7.         i = 0,9 ~  P( p5 y% ?
    8.         (1).while {/ Z' X* a) J% s
    9.                 i ++,+ W; y\" e. \1 C& A( f
    10.                 temp = zr * zi,+ P1 w0 N2 b/ M3 l
    11.                 zr2 = zr * zr,+ z: o% Q0 k: g  n9 S
    12.                 zi2 = zi * zi,8 k: \* L4 ^/ q$ \$ {
    13.                 zr = zr2 - zi2 + cr,7 x# G: P. S+ a7 K5 Q, T* u
    14.                 zi = temp + temp + ci,+ f( \( q5 c! z9 F. ^. P3 C
    15.                 if [zi2 + zr2 > 16, return (i)],
      $ G$ {! ], Q3 `2 H/ L  q- }  j
    16.                 if [i > 1000, return (0)]  B( ^' P6 h& C# L0 A
    17.         }
      % c1 t\" }* C1 D- ?, t
    18.         
      5 A) }8 H- H% c\" Y9 C/ G
    19. };
      2 t$ i$ e2 l7 p, R
    20. main (:i,x,y,old,now) = {
      9 ]* c, [+ ]* ~. G3 E
    21.         old=sys::clock(),
      5 Y- a  |  k$ r9 V4 |
    22.         y = -39,
      / ]0 \9 g6 U# E8 f7 z/ }8 E
    23.         while{  y < 39,% a# [& g1 ^/ V$ l* O9 l0 s# M
    24.                 printff("\r\n"),
      ( v4 v6 ]6 f, q; y' w; ~' W
    25.                 x = -39,
      ( F' `' }) w7 G$ d  R
    26.                 while{  x < 39,; h( ?; d$ H) C% z1 o
    27.                         i = mandelbrot(x/40.0, y/40.0),
      7 g% P7 E3 Z  Y5 O( x) P4 L9 Z
    28.                         which{        i==0,
      ) q6 e, M$ S\" X. M8 W% \. x
    29.                                 printff("*"),
      , R, R\" c  D+ u* H
    30.                                 printff(" ")1 j& [; V% `+ S\" x- k7 }
    31.                         },' f2 b3 H& H, \' t8 a- |
    32.                         x++9 ~, Y. [0 |; M' e
    33.                 },- C3 Y, u/ P3 c! W7 t0 u1 E
    34.                 y++; d- W( Z* n2 J; c2 ]
    35.         },# j) k/ q6 T  s+ f
    36.         now=sys::clock(),- T; w\" V\" p) \# v% v! |6 N
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)
      . |4 d% T5 ^6 h. F: C
    38. };: p1 H0 U$ k: V( |\" n3 n) H. v+ M
    复制代码

    7 x( V9 m$ D; m, t; q运行结果:, i" ?& _0 x, k- T
    1.                                        *0 ~/ l/ P1 z9 G3 e8 p
    2.                                        *
      5 @- u$ m8 t+ }7 |, x/ l! z
    3.                                        *$ N# z+ P4 y7 N  E
    4.                                        *
      & t- D8 N/ K( ]6 s
    5.                                        *
      2 {- h9 ?\" p5 [0 G( p
    6.                                       ***! L+ l9 I8 T: N0 B0 h' H4 C
    7.                                      *****
      4 K\" T0 U/ {6 @\" V2 i
    8.                                      *****
      : a\" G) F9 I3 h
    9.                                       ***
      * ?6 Z1 Y% f3 ]# H) l
    10.                                        *( V8 U% o, b0 x- l/ }$ [\" E% R
    11.                                    *********$ r7 S6 d& Z! E% J- r
    12.                                  *************
      1 B1 q! W. s+ a' |2 g6 J
    13.                                 ***************/ X/ \9 M- |$ k( x
    14.                              *********************
      9 g* q; t( F6 @% _, I
    15.                              *********************
      1 M* d3 D* ^' f  n
    16.                               *******************8 P+ M. G* t; _; t
    17.                               *******************
      1 f  }$ E) D8 K
    18.                               *******************3 s( D; A* n$ R4 J; I
    19.                               *******************
      7 B% P) B: X  F* Z\" w- @$ a
    20.                             ***********************& U! ?; c- ~9 c! N
    21.                               *******************
      # ], \& g\" f' j\" @8 S
    22.                               *******************
      2 A  @5 S+ ^$ V( A. t8 x# N# w' h
    23.                              ********************** T8 K% R7 M1 r) [
    24.                               *******************; ~. o) q# {) R8 T! W( C7 i
    25.                               *******************
      6 N' g' Q\" p; }\" |1 ^  K7 \
    26.                                *****************  R3 y+ E. E\" ?# x+ ?  W) k
    27.                                 ***************7 r# I0 D7 ]) C2 ?) V
    28.                                  *************
      ) B+ \7 M\" U9 @! N
    29.                                    *********
      & O& z2 v3 S2 z6 z
    30.                                        *9 d$ h1 n7 @; K; c6 D4 s1 c
    31.                                 ***************5 J' j* |  @  `7 e4 n7 a) U( L& J$ c
    32.                             ***********************. e7 E) h1 Q9 p5 w2 X\" K. Q
    33.                          * ************************* *
      / s1 g* |) w3 A: C5 L+ E
    34.                          *****************************, w7 t1 Q/ U- T1 T. e' v; i
    35.                       * ******************************* *) S\" N* r+ b2 z  M2 o; x4 [3 A
    36.                        *********************************
      ! L1 @4 W: }$ a' t
    37.                       ***********************************
      \" p, ?6 ^0 H8 g0 K2 n+ L
    38.                     ***************************************9 I) O! V) @) S1 K/ |) M+ j$ h1 r
    39.                *** ***************************************** ***$ Y. z' m% ], C6 L4 x3 }' p6 S% Y
    40.                *************************************************
      3 p4 @! H1 F0 Y8 i1 `. `6 Q6 G
    41.                 ***********************************************' G( V4 }9 E$ L0 t) @\" P- `, S
    42.                  *********************************************
      $ W3 I\" F) b3 D) }. y6 U
    43.                  *********************************************0 O, W) x) L$ X& W\" }3 _
    44.                 ***********************************************
        ~+ r! b) {3 o) K  A6 M
    45.                 ***********************************************: k4 a9 }/ [: p  @% E
    46.               ***************************************************! M4 p1 B/ M$ e9 x2 j
    47.                *************************************************\" z\" s\" W* @8 f  G6 M
    48.                *************************************************
      - p/ v9 n; q9 V
    49.               ***************************************************
      ; D' P$ X6 V/ T& S
    50.               ***************************************************: g& z: K1 v+ [8 \3 d: h/ i, e
    51.          *    ***************************************************    *
      + x9 e; |. R+ K\" z
    52.        *****  ***************************************************  *****1 y4 A; J2 Y5 q8 R3 X
    53.        ****** *************************************************** ******
      \" P3 _( E. C2 ^( h% A% @1 B
    54.       ******* *************************************************** *******
      7 n6 t, c7 Q6 E
    55.     ***********************************************************************5 M* c. Q! I3 d
    56.     ********* *************************************************** *********
      ! h5 k  L\" S. a7 ^# B( s7 d
    57.        ****** *************************************************** ******
      9 B9 P! a! B' D6 f( k4 w; M
    58.        *****  ***************************************************  *****
      , s, a6 l' k  S! A2 A! d
    59.               ***************************************************\" ], n! \) z2 a* o' a& C& m
    60.               ***************************************************- Y  U* o5 s* `0 E: F
    61.               ***************************************************1 \# u1 i: k& x/ J! B
    62.               ***************************************************
      2 j6 M  e\" q5 f( D3 C! Y: C% m
    63.                *************************************************$ [& Z5 |+ y% }. o! u\" J
    64.                *************************************************
      5 G2 L6 [' l2 @5 [# f0 m9 m
    65.               ***************************************************$ p0 h: W. l/ `0 k2 t8 K' k% P
    66.                 ***********************************************# x+ [4 P1 ~& x; `% [) l
    67.                 ***********************************************
      + V+ a& i4 J8 c! j* O1 l5 s
    68.                   *******************************************
      3 |; K: D& e, }; w
    69.                    *****************************************
      0 P( X  k9 J  x% p: B2 p
    70.                  *********************************************
      \" y. \) i7 \( a& b  u
    71.                 **** ****************** ****************** ****- ?3 E6 q& k8 o' _: X
    72.                  ***  ****************   ****************  ***+ i3 J4 z  K8 }5 E4 K% C
    73.                   *    **************     **************    *
      3 M$ S\" A$ v7 R! `. }6 t* O* j
    74.                          ***********       ***********7 V\" f% U) a7 N. M+ O
    75.                          **  *****           *****  **3 X; H% k4 I/ C\" ^  u
    76.                           *   *                 *   *! `' {( K8 |* y9 t! N# r
    复制代码
    # Y' g0 c6 ]) q7 \4 R# B; S
    运行时间为:
    4 {) P% G' Q) c, Y$ ?1 Z5 }1 w; \# r7 V0 c2 }, k1 I# K' G
            Forcal Elapsed 1.0781 H; g2 Q# I0 `8 E8 ~/ U8 _2 x
    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 00:21 , Processed in 0.632952 second(s), 54 queries .

    回顶部