QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3291|回复: 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的扩充性能更好。
    + K0 @6 O( G' U- D" `在大量函数调用时,Forcal更具速度优势。
    5 P5 |1 n' j% k2 _( Q1 Z& D7 ^以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。& M8 c* w( j- ~5 z! e+ ?3 y- y6 |

    " Y7 A9 k+ \: C* |; f* |例1:Fibonacci递归程序(n取40)+ \* G( I; d  {+ t  X" U
    1. SetRealStackMax(1000);+ z+ T! N/ H\" F6 G4 \' \
    2. F(n)= which{8 N8 G6 {. z5 Y\" K
    3.         n == 0,6 f: A! G) D& I7 K
    4.                 return(0),# e0 h* h9 K6 k9 ~% m
    5.         n == 1,6 |& E, K/ B7 [: b5 K, h* i$ O
    6.                 return(1),
      ! R, p, R+ Q/ f' h2 S3 V  G% S, [
    7.         return [F(n - 1) + F(n - 2)]
      0 G( X' m- w- f( Y( u0 Q! C
    8. };: {5 V/ h, y% v6 _\" o
    9. main(:t,n)=
      5 K$ T/ L\" r. H& X! e( u( m+ n
    10. {$ y2 w! ^( }+ x' C0 g5 h) W; r' z
    11.         t=sys::clock(),
      7 T- I9 f' k0 C7 ^
    12.         n=F(40),$ h8 j; Q! p$ q( a, K+ X
    13.         t=sys::clock()-t,# {' a& g, o7 ]
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}: I! }! T. C: u2 @9 A7 B  ^
    15. }; ' o5 N3 E0 z* G' D\" r# @
    复制代码
    结果:
    * x9 \! W4 S0 K" ~2 B! h
    , V: _3 N8 a0 P( f5 V+ Kfibonacci=102334155, fibonacci_Time=41859毫秒=41秒
    0 ?& R/ k( @) @/ O8 I0 b5 [. m8 C4 U3 K5 U( T6 W& l5 k) H( D
    例2:八皇后问题7 s. Q5 e' Z3 C  m% z' x
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。( E2 I% v  x7 `5 w( i
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。
      : W6 W1 H( o  w( k) V, l2 J
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。
      + Y8 D. U\" f1 w. Z! t* [\" G
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。
      8 s# p0 u' t9 ^7 J$ G
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。\" M, o, g: \9 S& Q
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。
      # A1 N& Q) @- q. k1 c, U4 x
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。0 \5 S+ }0 H6 f( y7 t6 ^; D% Z
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。, W6 o$ V: Y7 y, t9 N- ]
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。 ) I) r+ E  k0 E: I- G0 q1 C
    10. //Forcal源程序; ?. g5 a2 `\" [\" k) S
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);* @$ |7 j* U. `8 t- F0 _
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=4 U( ^: h) h2 _0 I
    13. {/ @7 F) A1 Y: Z/ k0 G, a
    14.     which1 r; h/ e  y  H% x
    15.     {   row != upperlim,\" r& e# e, Y7 D$ q. @
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},
      8 d: }/ W. }4 o  [2 q8 G
    17.             while{ pos,
      6 T4 g5 J4 C& Q3 z/ F
    18.                 p = and(pos,-pos),
      , V; {9 [& g4 t. y* O9 B
    19.                 pos = pos -p,# }2 V; E, Z% Y4 Y8 |% N+ T4 x* w\" X
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))5 T* ^  l\" C: @' m# v
    21.             }
      & i  H, J' J9 E1 M# O\" s
    22.         },
      ( Q' `8 {2 V* A8 B2 O
    23.         sum++
      8 g) U* y! C9 U: f' ^) d
    24.     }
      ' M' p) d; g- m3 F) X
    25. };
      % F2 `& u/ P! X* w# G
    26. i:main(:tm,n:sum,upperlim)=
      $ J  q6 O: I% [0 Q\" |: C
    27. {
      $ X; v  g' a8 ^! ~! i9 `; F
    28.     n=15,
      - K6 B\" N& _$ {6 y$ |+ d
    29.     tm=sys::clock(),0 L5 I4 ?( J8 t
    30.     printff("Queens:{1,i}, ",n),2 `! W* _$ t- e+ ~2 ]+ O
    31.     upperlim=shl(upperlim,n)-1,
      + d; u7 R& Y5 X) m3 v
    32.     test(0,0,0),$ S- N/ p+ J9 d* d6 d6 q8 g* J0 V; k3 ]
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)- {3 {& H3 T% J4 d: a2 Z
    34. };8 {5 [2 }/ e* u, k
    复制代码
    Forcal运行结果:2 s: u9 o! ]2 d0 e$ g3 Y7 n

    - `% ~1 o+ g4 `4 p    Queens:15, sum:2279184, 59547毫秒.
    $ C4 H0 b% j) [1 _* M, |' ~- i! F7 \
    0 @  P8 Q2 B4 Z) m' [: K( G! J例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右' D) C; z! k0 V" n2 i3 z
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =
      . s, y. M9 L2 X  |1 n  h8 ]
    2. {
      4 ~$ n; Q0 ]% I$ H. V. \1 Q
    3.         cr = y - 0.5,
      4 B8 A+ t# {9 j( r1 }) }& _. Y
    4.         ci = x,1 y( H4 |; b# P
    5.         zi = 0.0,' C  ^6 W! N; H. S/ P9 Q1 S1 e
    6.         zr = 0.0,
      7 {# ]/ g6 D/ T( Q
    7.         i = 0,
      2 w' T3 e& ?3 b1 m% y. t2 q; f
    8.         (1).while {5 F4 Z' X4 u- g; B
    9.                 i ++,- C2 l& c7 [; }' `: }6 _  {6 Y
    10.                 temp = zr * zi,
      5 `9 `: p' Q/ a& r
    11.                 zr2 = zr * zr,6 [( M$ v7 V: S* {
    12.                 zi2 = zi * zi,- c. H! o$ f; C' d3 U+ K\" p
    13.                 zr = zr2 - zi2 + cr,( e; k/ s: L- s0 ~( S$ t, e  V
    14.                 zi = temp + temp + ci,
      $ I\" H6 y$ D\" j) e/ d* b
    15.                 if [zi2 + zr2 > 16, return (i)],
      ( I4 Y1 S& c1 V# W; f; T8 v
    16.                 if [i > 1000, return (0)]5 W: w7 C3 R0 M  L1 F\" k* S
    17.         }
      , d3 a  R& z/ o0 w, ]9 n5 J
    18.         
      % y6 I2 d; t( [+ T# ?* }
    19. };% c. s* _6 H/ J6 k% R) B
    20. main (:i,x,y,old,now) = {! Y4 g5 z' R\" q1 E  v8 |: C( f9 m) {
    21.         old=sys::clock(),8 Q5 j! o+ X9 p& r: G$ a. k2 c
    22.         y = -39,
      / H8 @$ B6 G7 `
    23.         while{  y < 39,
      & ~. Y1 i8 f7 m! X
    24.                 printff("\r\n"),  C  ^6 d; I* \2 p' ~8 L  k- D
    25.                 x = -39,
      # _1 t' S& M6 U; c3 V4 h
    26.                 while{  x < 39,
      9 K9 R8 N- Z$ L2 n% c4 q
    27.                         i = mandelbrot(x/40.0, y/40.0),3 a5 q4 `: k( h* @
    28.                         which{        i==0,
      9 A# _: p) V7 \+ g! Z
    29.                                 printff("*"),
      0 {+ d2 E9 }* z\" B1 g5 Z
    30.                                 printff(" ")$ b; B/ P  k: h1 e' m. `( Q
    31.                         },
      * v! j' ~4 O; x$ m* ?$ E
    32.                         x++
      : W2 s& V\" {( U& b9 e
    33.                 },
      ! ]- Z' }( I5 y, @' x
    34.                 y++
      . i\" Q# a\" R5 c9 q/ w8 i
    35.         },8 M. \% q# |- H7 x0 B$ U+ _
    36.         now=sys::clock(),; e4 L# o* Q; P
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)
      / S; k+ @- X5 P' \/ F
    38. };\" }% B$ [! E; ^0 m7 g4 w' r& H
    复制代码
    1 r% [- o$ d: z  e9 C2 |# G7 L
    运行结果:, ^# q. `9 g3 ]) m
    1.                                        *
      8 {, L) s& I/ d
    2.                                        *
      \" s0 |  }8 j  e5 M% H% [\" f& M
    3.                                        *' i5 j- K4 S% {$ p
    4.                                        *( Z$ f- [, b& `+ c
    5.                                        *  r+ \4 m# g. z& d3 \8 d
    6.                                       ***: M- S: j* G' H5 f$ l' Z% n
    7.                                      *****
      3 L7 p1 A* z2 U  b/ h
    8.                                      *****
      - l  C/ [) R! R5 z
    9.                                       ***
      \" E8 O2 M/ c# F\" G7 J
    10.                                        *3 b( e( [' Y+ W3 y3 J
    11.                                    *********
      / E4 K) {: |* J
    12.                                  *************+ ^3 ^2 q( Q7 r4 n1 e
    13.                                 ***************9 g  C' \0 y0 N# F2 p1 U4 J
    14.                              *********************' d( ?$ |- {! I+ @8 A
    15.                              *********************: ]& `( t! E$ d* C+ z
    16.                               *******************- M2 W# o/ K\" [* a- B* ?# n
    17.                               *******************
      7 b: S- `* @1 W
    18.                               *******************
      / Q8 G# n\" h. E4 ?6 a. J
    19.                               *******************
      ( j8 C\" h2 T  f1 O9 _
    20.                             ***********************
      * y: S! L7 |! B9 R7 Q% u  D
    21.                               *******************
      $ ?% J. D. k; [: f( S
    22.                               *******************
      - W0 l: I3 D( K' Z3 H0 x4 g
    23.                              *********************# ?, C! W; z1 d# R# F
    24.                               *******************3 x$ D6 h/ H. ^# k6 i
    25.                               *******************' e1 \- c+ d; h; D% H
    26.                                *****************% N9 `3 R; x4 f. m( k
    27.                                 ***************( q8 u, h& y! h6 Y
    28.                                  *************9 @) L( A6 W4 @; H  w1 x, R
    29.                                    *********
      . S( [4 {) U& ]* h( ]: T: C
    30.                                        *7 Q4 e' G7 B5 }* c6 G, \
    31.                                 ***************+ I* X& ~. j2 b
    32.                             ***********************5 _/ c6 P+ N9 ~
    33.                          * ************************* *
      3 N% s$ ?; w9 {/ h\" r+ K! V
    34.                          *****************************
      * j# C0 Q: t, [6 w6 \
    35.                       * ******************************* *  r1 v& q- W! U4 A9 M
    36.                        *********************************
      1 b. B7 M( N4 R- D1 O: x\" I- S
    37.                       ***********************************
      & [; Q6 l- D! j9 ]$ ]' {: w4 {7 y
    38.                     ***************************************) \4 s4 r( A; n) S6 }* o; U# M% f
    39.                *** ***************************************** ***
      \" L- W& x7 i  U, G1 \% r
    40.                *************************************************( s8 _7 P, s; v8 F5 C9 u$ x
    41.                 ***********************************************( l) O8 B# {% ]8 t
    42.                  *********************************************- }: {' Q+ V( Y
    43.                  *********************************************
      6 w2 B\" G* A' t4 t) f( n
    44.                 ***********************************************2 {: M# ]% A0 O, I' @\" [. \
    45.                 ***********************************************( ~4 b* k( w\" i' h2 D
    46.               ***************************************************
      $ }  F, J# V; ~5 ^, N
    47.                *************************************************3 c7 b9 A1 F1 d6 P' c& P* J
    48.                *************************************************# t; ?2 Q. m# }/ C/ _
    49.               ***************************************************
      9 o: |. X8 V- U1 o/ \+ v! p\" ^; J0 U
    50.               ***************************************************
        X' `# {2 d* U% N' N. s. i' S
    51.          *    ***************************************************    *8 O5 N\" ~, D' k
    52.        *****  ***************************************************  *****
      . s4 g$ b! z2 H2 Y3 c
    53.        ****** *************************************************** ******' R, Y& O( z  S. ~- w3 K
    54.       ******* *************************************************** *******& w+ E* S- E2 C/ y, y6 J4 a9 p! }4 T
    55.     ***********************************************************************
      , K# v2 [3 D) y\" T\" f4 l; Y
    56.     ********* *************************************************** *********
      4 m6 x% s4 @- |6 P. G) L  \0 q
    57.        ****** *************************************************** ******6 x5 W! Q0 @% B
    58.        *****  ***************************************************  *****/ w$ Q# p3 `' X! A
    59.               ***************************************************2 R2 O# N: N. z2 p* j0 p4 P; A
    60.               ***************************************************
      8 [% R# v6 E* r0 K! R$ {
    61.               ***************************************************( x( d9 ^0 @# [
    62.               ***************************************************- y& m& f) i2 ~- Y
    63.                *************************************************\" c! d1 P3 C# p4 T, D\" z) _
    64.                *************************************************
      ; t/ y: h\" _& h$ P2 ]
    65.               ***************************************************! ~* k3 V7 l! `& c: H2 S  D' e, x
    66.                 ***********************************************; q- O6 q. E\" X5 P2 X7 Z
    67.                 ***********************************************
      5 z4 F# s6 G1 K
    68.                   *******************************************
      ) q; H; }* b) B  N1 }% ]
    69.                    *****************************************
      ; U, r7 ?/ n/ ]
    70.                  *********************************************
      - K- m- A: R' d4 _8 }
    71.                 **** ****************** ****************** ****/ I2 G2 b/ H7 s' S0 l/ G% f
    72.                  ***  ****************   ****************  ***1 x& m3 L' F( X2 |$ M7 c# v, K- Y
    73.                   *    **************     **************    *
      % c0 K' ], y- d1 `# f; Z
    74.                          ***********       ***********, D- n0 z) y# T) n# r1 i
    75.                          **  *****           *****  **) a; Y# F& |9 U% H# I+ W7 W
    76.                           *   *                 *   *
      4 i9 M# i% C) f* g; [: Z
    复制代码

    & R) N1 ?) h* \8 \6 t, S运行时间为:3 T# F% A& q; ]  P: t

    0 R0 b/ Z$ L9 k2 f0 U" w& {$ J+ w7 y        Forcal Elapsed 1.078" ]; p$ A; [% d. v, N4 o
    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:00 , Processed in 0.408266 second(s), 51 queries .

    回顶部