QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3290|回复: 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的扩充性能更好。
    ) k- e+ v% U  G- M; G: x在大量函数调用时,Forcal更具速度优势。6 Y3 H+ M. @# V& X+ ^
    以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。
    , D+ Q1 i' Q* _" ?! H; m7 p9 }
    , Y  M  U9 e9 R2 P0 J例1:Fibonacci递归程序(n取40)
    & Y- e: q7 _$ t/ m2 c7 i
    1. SetRealStackMax(1000);! H\" a1 P7 K* j. H; U% P# ~
    2. F(n)= which{
      0 X5 i% M& i% F8 j' ~( |; P7 B
    3.         n == 0,( D( k5 {7 N) r- |; q, h( T
    4.                 return(0),# z% C+ U' M# }- ~/ X* W
    5.         n == 1,
      2 [; C6 t$ t# d6 [* j. J
    6.                 return(1),
      ) f) f6 `1 O) y! H; ]; n7 ?5 u
    7.         return [F(n - 1) + F(n - 2)]/ z6 O; y( [/ K# D
    8. };
      . L; q, Z! z& H; P8 g4 l, A
    9. main(:t,n)=
      ; X2 S( Z( _: h# j/ E1 F\" Q
    10. {
      % E4 ]) ^! Y: |( M* \
    11.         t=sys::clock(),
        W7 F, |- {3 `' K( ^
    12.         n=F(40),
      / Q. e# d. m, a8 A& z
    13.         t=sys::clock()-t,
      0 a\" ^) |; g& {
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}
      $ I$ r9 x: B# V% L
    15. };
      3 d+ x7 P& x5 x: g
    复制代码
    结果:
    # x: C) x( k" h/ \5 E4 {7 Q% z4 W" X3 `  p
    fibonacci=102334155, fibonacci_Time=41859毫秒=41秒: h& _- F) ]1 y/ I- v" b6 Z8 [; ^4 P
    5 |) D( B2 i8 N+ Y2 Z
    例2:八皇后问题& P$ h. q. x2 `. W6 x
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。
      5 N\" w. t9 o/ u( p
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。
      ' N9 o8 L- B8 z6 Z3 u
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。( @) E2 {\" Z; N( ]: e
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。& X' ^2 [9 J/ p  k8 j% V; ~8 w
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。+ i( N, ?6 `1 @
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。
      0 d, @  Y; D' g
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。$ f5 `$ q) P\" [
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。  X9 v2 I0 [4 ]3 U) L. x\" d7 ?
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。 : M) u5 K) L+ V
    10. //Forcal源程序
      ; Q. s7 c' k6 ]) u# o
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);$ L9 j' ]7 Z# _6 ^. X, ?
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=
      + X- H# B# [3 U1 f
    13. {
      ( J% E8 J1 R( u, B, q7 q
    14.     which
      # D1 S+ [, p9 [' t# P/ _
    15.     {   row != upperlim,
      , l3 c) O3 `4 L( [
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},3 d( h1 z  s0 q% ]* m
    17.             while{ pos,. G4 `+ J/ s5 |/ \
    18.                 p = and(pos,-pos),
      + x' F5 }. z6 S9 E( P+ e9 o- _
    19.                 pos = pos -p,
      * J0 J\" S5 O4 \
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))6 B$ A6 E9 f+ r/ S; d2 K, z3 n
    21.             }
      : Z2 ]0 J\" ?; C# k  d
    22.         },- y! ]\" h( z9 b
    23.         sum++
      - M7 ~; O2 {! \\" `% g8 M
    24.     }
      - i6 G$ b: ^+ S1 Z5 R% M6 l8 T! ?# y
    25. };& I9 z( A, A+ T  ^: H\" M! @
    26. i:main(:tm,n:sum,upperlim)=
      6 q+ [% d' T, d
    27. {: V  }; G' y) V\" r! b
    28.     n=15,4 W4 |9 J$ x  R' |3 N, x
    29.     tm=sys::clock(),% M4 b1 Z* Y. K& F; e) a  c/ [
    30.     printff("Queens:{1,i}, ",n),\" V$ T9 M0 N# O0 ^! g% b8 `
    31.     upperlim=shl(upperlim,n)-1,, K* Q5 o% t! G
    32.     test(0,0,0),/ O; p( i; r+ g: j1 J
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)
      + y1 `7 i& f- u& O# |# a, M
    34. };
      : H/ m1 m2 Y/ B% v! z
    复制代码
    Forcal运行结果:1 ]4 n& B3 c  V! m: _) T
    1 {/ H' ?4 n* E2 C
        Queens:15, sum:2279184, 59547毫秒.3 d& z& \- a9 m7 ]  e# P  ~/ |& I3 M3 y

    0 B- X! t0 V0 x8 A5 ^! L例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右+ F! y+ O# y+ f9 P+ I
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =
        I* H3 U7 K0 T$ a7 y
    2. {% e+ d: l' l8 F& z
    3.         cr = y - 0.5,/ l; k2 m2 Z3 ]2 }
    4.         ci = x,
      ; s% K' M5 F# U$ R2 A
    5.         zi = 0.0,
      ( {/ n' u) j4 [) h, `# w& Q
    6.         zr = 0.0,- S/ q( z) L* A9 [  A* U) {! I% q
    7.         i = 0,5 v\" d! S4 n/ j$ H( ^6 E) o
    8.         (1).while {
      ; V- O6 ~# m7 y1 }* n: Z& q
    9.                 i ++,
      8 ]! R# X5 G; O; ~
    10.                 temp = zr * zi,1 n\" j. b% E# \7 P3 H# b0 c
    11.                 zr2 = zr * zr,; N  `2 m9 z0 }# ]/ _
    12.                 zi2 = zi * zi,$ _0 l4 u+ x4 A
    13.                 zr = zr2 - zi2 + cr,
      ' y5 z3 w7 G! c5 x# c& S
    14.                 zi = temp + temp + ci,7 }9 Z9 K6 R! G% t
    15.                 if [zi2 + zr2 > 16, return (i)],# F1 x  }! A* e  u$ d\" L
    16.                 if [i > 1000, return (0)]. a. ^' X9 ]( h7 _
    17.         }
      ! a+ Q& T\" J- f4 W* \! z
    18.         * w) G7 U$ c/ E6 F
    19. };( t, f( V/ A7 s  B* F6 l
    20. main (:i,x,y,old,now) = {
      0 @% o+ e6 A- K1 M* l2 \
    21.         old=sys::clock(),( Q) z5 j! e6 b* x
    22.         y = -39,0 H! F* F4 ]7 b+ T4 m
    23.         while{  y < 39,
      9 r# h1 @& L4 |9 y
    24.                 printff("\r\n"),
      5 z: J/ W& R, o. _7 q* d, b4 C* w
    25.                 x = -39,
      - j# n! d: i2 L1 \& u8 q& O
    26.                 while{  x < 39,
      : j* I( a2 Q! U6 X. `
    27.                         i = mandelbrot(x/40.0, y/40.0),( G% S' J: P6 g6 A7 `
    28.                         which{        i==0,/ W8 e; L  C7 l! s
    29.                                 printff("*"),\" d# w: \1 d6 [6 A
    30.                                 printff(" "). F1 U: o8 d; k( O
    31.                         },* m$ G2 [9 F* W5 q. G0 f% ^
    32.                         x++: @. j* N/ a# X* B+ B0 ~2 y
    33.                 },( w) T1 U5 Q$ C3 x* d: F
    34.                 y++
      + t2 b) N+ p2 b) _3 h
    35.         },
      : p1 t4 Z2 \0 a8 g
    36.         now=sys::clock(),
      + q' }/ x. d, i: H7 m6 B. G
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)
      / o8 y0 \# P9 W
    38. };& W\" l\" H8 V/ p. y2 L& B
    复制代码
    , k" `6 d. h9 {; q2 a$ i: I% `
    运行结果:
    + d- g9 k4 H: T/ y
    1.                                        *
      ! K5 J\" M5 U  i/ u: L' y
    2.                                        *
      & x\" L' s2 |, i9 u) C
    3.                                        ** t1 L3 ]1 I! J- f8 B# S
    4.                                        *  h$ S0 W1 ]# N
    5.                                        *
      * P3 ^0 Z1 a. z0 E5 ^
    6.                                       ***3 ?2 n- U; A. k  V8 B8 N
    7.                                      *****& E3 t0 E9 v: W# f8 U
    8.                                      *****# a- O) F4 i4 p' [4 Z
    9.                                       ***
        r: |7 o0 U; c9 t3 K
    10.                                        *, b% r! n# a! X- x% E$ p
    11.                                    *********, E! H) Z/ W8 t
    12.                                  *************
      0 [# j! B% P0 k
    13.                                 **************** K1 X* ~8 h3 ]- p- n( [8 \
    14.                              *********************
      2 V# Y/ g\" W8 e\" q
    15.                              *********************
      9 l) U: q# s! {
    16.                               *******************1 }; }! u% o6 g3 M- I8 u\" f
    17.                               *******************
      ! v. p7 k6 U( e/ e
    18.                               *******************
      $ ?) \3 p# O9 r& m$ n, T
    19.                               *******************
      9 @- T6 Y& B9 `2 c4 w. N
    20.                             ***********************
      2 H7 h' m) x! n) g9 ~0 S* b4 y% M: y
    21.                               *******************
      % H: ]# ~- C' X6 r; J4 H
    22.                               *******************' c4 h* h; c3 l* H- @
    23.                              *********************
      . L5 p% \2 ?' ], [2 O  i& A7 V7 Q
    24.                               *******************& T5 N1 L2 ~* `1 W0 d1 x
    25.                               *******************
      8 m: @+ v. |, \4 h/ c4 t8 Z  L
    26.                                *****************6 ]7 l' G8 t0 B! z8 G' M- h, K
    27.                                 ***************
      ( l* n/ ~9 ^4 d& a, a
    28.                                  *************4 t# H5 j. R  b# N8 `# N0 \  g
    29.                                    *********  i' a& \+ I1 L* J
    30.                                        *
      ) W2 d\" j9 d8 C  Z4 s
    31.                                 ***************
      ! `( i! X! z2 M1 `
    32.                             ***********************
      4 ]* v' M/ z$ y/ D\" \. @% e9 G
    33.                          * ************************* *3 _6 T8 ]0 T* A
    34.                          *****************************6 _% p5 G6 w' U% H. }! V
    35.                       * ******************************* *# u\" X3 D. @& a: n) `6 B1 m
    36.                        *********************************3 j: |% B, ]; `
    37.                       ***********************************\" B4 @4 C7 ~4 ^+ `- i
    38.                     ***************************************
      % y& _/ C  K4 U# c8 ]  V
    39.                *** ***************************************** ***2 r# h) N- y0 c  `
    40.                *************************************************
      9 X; K( n1 s\" _# R1 P7 }
    41.                 ***********************************************
      5 K9 ~- p2 e. R+ v
    42.                  *********************************************; Q, {- p' }7 j+ u9 Q( k
    43.                  *********************************************  P+ {) h: \/ \( Q: r! p
    44.                 ***********************************************
      , v) ?# D7 Y# W
    45.                 ***********************************************# D* B1 k- `9 a- ^6 x
    46.               ***************************************************3 Z! ?. t7 n9 O/ o! \0 h0 {
    47.                *************************************************
      1 A\" A: b2 H% S# I
    48.                *************************************************
      ; p/ g0 z\" w$ O1 b* f( D
    49.               ***************************************************: s2 u: h( R0 j+ Z$ U
    50.               ***************************************************' ~9 N4 P& Y3 F# R
    51.          *    ***************************************************    *; C2 J( ?% r; g# B$ z0 f4 Q& x0 d
    52.        *****  ***************************************************  *****
      $ f/ B, w8 N2 D- a1 I- f
    53.        ****** *************************************************** ******! Z- H' f+ }: S- g\" B) `
    54.       ******* *************************************************** *******
      - @  M# W, @* f/ K; n: [. S' y
    55.     ***********************************************************************& ^7 v9 j* R6 _; Q0 m
    56.     ********* *************************************************** *********
      5 Y# K0 T& ~' X0 M
    57.        ****** *************************************************** ******
      ; P& W# G( s0 ^
    58.        *****  ***************************************************  *****7 M# t. {7 M& v% f\" @2 V
    59.               ***************************************************+ t+ w/ Y, Z7 `5 g- u  D$ h
    60.               ***************************************************
      ! A- m3 @' v\" `6 g- U\" E
    61.               ***************************************************! ^& D. H0 V4 V2 C3 J0 l- a6 T
    62.               ***************************************************
      ; z; F$ J$ b' w8 s
    63.                *************************************************  L  \$ U0 _. Y. `/ L; T( R: p9 v
    64.                *************************************************) S8 R2 S3 k4 A& x4 Z9 G+ |
    65.               ***************************************************( G. I3 C. j/ O- x9 f4 j- Y
    66.                 ***********************************************8 T1 n. Y\" E- m
    67.                 ***********************************************! f\" L! @  p( r. h1 R5 G3 g2 `
    68.                   *******************************************  d. R1 _; k, S
    69.                    *****************************************
      6 S* l5 B\" w) p! h
    70.                  *********************************************
      $ Z; U6 a7 N& v\" h4 j% H. J4 ~9 s9 W
    71.                 **** ****************** ****************** ****
      & X  g+ ?2 O8 ]9 z# V+ t8 A
    72.                  ***  ****************   ****************  ***
      8 \# ?# E- U- P3 f
    73.                   *    **************     **************    *
      : Z, G5 z9 F( F1 V! Q% v# x; A
    74.                          ***********       ***********6 o; ?$ e2 |\" B
    75.                          **  *****           *****  **
      6 a% \\" u) V7 D% Z1 f4 `
    76.                           *   *                 *   *
      0 B\" Z( u6 O5 L( U  F  U/ s
    复制代码

    1 @8 C. t1 A) t! N运行时间为:
    ( h  B& x. r2 M& l1 u; ]6 g0 g% ^) M. y. D- Z
            Forcal Elapsed 1.078
      p4 c: M/ |/ v5 }$ [+ W
    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 04:13 , Processed in 0.609502 second(s), 52 queries .

    回顶部