QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3219|回复: 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的扩充性能更好。* F/ n! o" h$ T! o3 r
    在大量函数调用时,Forcal更具速度优势。
    ! ~/ c" Y; N: _以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。
    7 g6 k1 |4 h& ]
    - X, w$ G+ j0 Z$ K例1:Fibonacci递归程序(n取40)
    4 Z& G. F2 N9 A7 U9 P% R
    1. SetRealStackMax(1000);
      ' Q; d/ G+ w! [* X- H# c# b! p6 `
    2. F(n)= which{
      . F' O( @5 B9 H. @' J7 [4 B' U
    3.         n == 0,5 A* ]! {3 B5 n* G. z
    4.                 return(0),
      , y2 I& I\" t! o( e  k+ `: c* x0 _. c
    5.         n == 1,
      0 g0 f  ]. z\" \3 X\" w9 e
    6.                 return(1),! c0 J% p* `% \6 X8 g# S
    7.         return [F(n - 1) + F(n - 2)]
      . S6 V& x\" R& w1 P& r3 q/ s' T
    8. };
      - K6 G+ z, y: t8 J  Q6 z, H
    9. main(:t,n)=, ~* C! F& L  V: w
    10. {
      & K! L, z% l' ?; Q
    11.         t=sys::clock(),2 j+ S; J5 i6 M, P5 N/ w, n' U\" f
    12.         n=F(40),
      6 `4 w0 Q* p; \! \
    13.         t=sys::clock()-t,+ j' G% |- o: W; R: I/ b6 |* ~
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}
      + _) f. k7 r0 L3 m$ S& B\" u5 K1 w
    15. };
      7 `. S. [: }! V& h% F2 D
    复制代码
    结果:9 I6 @2 y8 ?$ T$ N. {

    ' y9 G: d0 [2 M* G$ c5 Cfibonacci=102334155, fibonacci_Time=41859毫秒=41秒  ]5 {. f) u& T+ x, s; N
    : B$ B# n" ?) M
    例2:八皇后问题& f& K+ {! X" x! o4 x, w
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。) [( K0 i& ~. B9 k: Z  Q
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。
      : g( D8 A. j- L8 E4 u
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。* {* a2 c! _% ]7 \! \
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。
      ( E3 B  Y( P' s; n
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。
      ) `! R. \# x4 I
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。
      2 x- G  P2 ^8 J+ V6 F# }4 ?: o
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。3 l* }7 W& h' _% O% c, b: T
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。0 ?5 w1 I' {+ ~
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。
      \" I6 H2 d, D; ^& @( C* s
    10. //Forcal源程序
      \" U; T2 T' A7 A\" J
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);1 z) W( V. e. f' B0 e- P0 p' y
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=
      / _$ V  W# n: w! p7 K& O
    13. {
      % K' Z, t) h: F/ F) w1 g$ s0 Q& P; N
    14.     which
        s1 \7 p' r( K0 {9 D' ]
    15.     {   row != upperlim,
      1 I5 _* }. K6 y# I9 d
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},+ F+ M- ~- D( l' h
    17.             while{ pos,; N6 y/ ~5 [! q+ X
    18.                 p = and(pos,-pos),0 u- \1 p4 U) d\" s
    19.                 pos = pos -p,, u5 Y9 q, p4 ]5 {( u
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1)); c, g; X/ n0 `# B* {( z) x
    21.             }
      ( O. \2 Z( e, R; `
    22.         },: v6 _# v0 A. p& t* i5 f: |
    23.         sum++
      ! L/ q# `2 `0 l1 C
    24.     }/ e9 M' n\" }3 w\" y
    25. };
      6 g' O0 j3 Q' G( I& e+ A1 W
    26. i:main(:tm,n:sum,upperlim)=
      ' S/ Z) o) G* x/ D: w+ q
    27. {
      / q3 n& m( `6 }, N
    28.     n=15,
      ' I/ W3 C2 O3 X- x8 B* h) f
    29.     tm=sys::clock(),
      + D# t: n5 m- y7 U: J/ D9 g' \
    30.     printff("Queens:{1,i}, ",n),- W) J\" V9 E3 E8 W
    31.     upperlim=shl(upperlim,n)-1,+ t3 O' L$ t( X: l$ Y. N  M
    32.     test(0,0,0),, b5 r* T7 V8 v) C% v, ^! q
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)8 |\" l' ~$ N8 D
    34. };
      2 A. D/ Q0 U) P* ]( H( {\" ], j
    复制代码
    Forcal运行结果:2 Y. t1 D. z8 x1 s5 _' [. M

    4 e+ ?' x! g8 W    Queens:15, sum:2279184, 59547毫秒." F2 {0 e# ^* R1 j' h

    , W& c) i" i. r2 c0 V0 u) N) P例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右# n3 c9 a6 o1 V8 `2 ]: `
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =
      + ^0 u4 D* X' a4 T; s
    2. {9 y# ?3 @( U+ a* y' G$ J: u; ^# d
    3.         cr = y - 0.5,/ L- f* w5 d! w! _
    4.         ci = x,
      ( z5 U. k0 C1 R) _
    5.         zi = 0.0,
      ) Q: E: `# D6 Y+ k- S( K
    6.         zr = 0.0,
      ! @! `& H* k5 S7 r\" |! V
    7.         i = 0,
      5 ^* l4 F1 \\" d) Y. e\" ]) m
    8.         (1).while {5 x- s( X: f4 b; a
    9.                 i ++,0 F, @; o, M( n# C3 @6 O
    10.                 temp = zr * zi,
      : C2 F7 F2 n( P( V
    11.                 zr2 = zr * zr,
      % k& B/ v5 I' ^- T# {8 T5 G
    12.                 zi2 = zi * zi,
      9 p( ~: K  A- J. X3 O
    13.                 zr = zr2 - zi2 + cr,8 g+ u* n% [+ K' D+ k, C4 q
    14.                 zi = temp + temp + ci,
      / t; J1 O- G$ O- C% I+ ]  P
    15.                 if [zi2 + zr2 > 16, return (i)],7 C$ T: k! c( Z# I3 m3 h3 U
    16.                 if [i > 1000, return (0)]( j. X% a3 n6 W# y+ v; E0 g7 U
    17.         }9 g6 B: Z) T) t
    18.         
      \" m/ u* l7 G( |+ n4 u8 U
    19. };
      % O7 k, o, E7 K8 t) Y
    20. main (:i,x,y,old,now) = {+ l8 J% W6 p- O9 I; n( a
    21.         old=sys::clock(),% {\" e% R, J0 r$ n9 Z; w
    22.         y = -39,: R' @2 p9 i# A4 _\" `
    23.         while{  y < 39,
      : \\" H$ Q- q! E8 V9 W( `  W7 O
    24.                 printff("\r\n"),' O: Z! V/ C\" R$ c
    25.                 x = -39,
      5 I5 D8 M& d, c2 W: n' ~7 E
    26.                 while{  x < 39,
      8 X5 g- @1 @% x* o
    27.                         i = mandelbrot(x/40.0, y/40.0),2 k. c6 S' w/ C7 v! R/ }) U
    28.                         which{        i==0,
      + |; K\" r\" k. H- g) F2 {5 G. j
    29.                                 printff("*"),  Y! Y; ~( H1 F' c
    30.                                 printff(" ")5 L, ?( H8 y\" X# Q
    31.                         },: I' v8 ?, l2 g* ~4 V2 N  o/ _2 I
    32.                         x++
      ( P8 x. H+ J6 V* s1 N% a
    33.                 },  V\" I\" U5 O8 _- \% ~2 W
    34.                 y++# t9 n! f1 ]# t) r5 z$ i
    35.         },: t4 m% o\" l, o! a
    36.         now=sys::clock(),5 Q6 U  h7 [\" N( B
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)4 _+ G  {9 }- H2 U
    38. };
      * u7 z- Z0 r3 Z
    复制代码

    0 a  f# @- R. H6 Z/ m( M运行结果:
    . R4 s* N9 p8 I
    1.                                        *
      ( m0 q% X, S5 @7 S2 x
    2.                                        *
      7 D+ E2 @+ `* Z6 ]$ ?; Y
    3.                                        *
      - ]9 R! O  F/ P# ^: K8 b4 D; u2 Y
    4.                                        *  O( r. I. o2 f. |( d
    5.                                        *
      . x1 D- |5 b1 K% U  n; o+ h
    6.                                       ***
      0 a8 g9 i5 O$ G- L0 C+ G6 Z0 Z
    7.                                      *****+ D8 ^( }/ J7 n; O: g\" f
    8.                                      *****
      ' o! b' L- @: j/ f\" q8 t9 k* Z
    9.                                       ***) [. {% g: I# ?' O& H\" t
    10.                                        *\" l0 g\" C% }2 u5 J7 C% `: k
    11.                                    *********2 `7 J2 d' E3 }$ u, b
    12.                                  *************- n6 t5 e1 V  T/ }3 e
    13.                                 ***************0 G* A* {1 C3 _4 `/ ]1 {
    14.                              *********************9 M( c: f- Y, p8 {8 K- q
    15.                              *********************, D% r. P9 @& r  |! {0 B+ q
    16.                               *******************
      6 I' f) ]7 x) V6 m. n6 O# c
    17.                               *******************: }' \\" i& S4 c5 i
    18.                               *******************+ f2 {, R. t; b% C' n. x
    19.                               *******************! H' I. w/ X* O- O: r; _
    20.                             ***********************% q) o. \/ S# x& H\" b* j\" ]
    21.                               *******************
      2 \* Q  v5 u: _/ x$ j\" d2 U4 g
    22.                               *******************4 n* `9 P& \+ i\" M! f
    23.                              *********************, X4 P/ E, W) T  u# m+ ~9 ^6 t  s
    24.                               *******************2 Q5 x8 m- J; o- {. F
    25.                               *******************/ o) Q; k0 G, Q8 D! t
    26.                                *****************: o- }8 [% y5 ?  S
    27.                                 ***************) R2 ?8 R  I! C8 k8 I7 z
    28.                                  *************/ p& [% z8 \8 f+ U8 c
    29.                                    *********
      : U/ D6 X1 f& X8 m$ |8 Y
    30.                                        *
      0 _  m$ u: [* R! q/ x3 Z. U
    31.                                 ***************
      \" r* G$ M( i9 W3 E5 E
    32.                             ***********************
      # ]. ~8 Z' h) I$ j+ c9 |& h
    33.                          * ************************* *. n- M$ |' x3 n8 |4 D' e% b7 G2 O
    34.                          *****************************( v: C, K9 h: z( }. E+ C  F2 R' ]
    35.                       * ******************************* *. Z1 I+ r- O& \  u' Z/ ~6 n) g
    36.                        *********************************
      6 U. Z* o; }$ g* E# V
    37.                       ***********************************
      ) N) G, O. Z1 _, t; l
    38.                     ***************************************2 S% X/ J3 ^% r  L0 Q7 t$ ]% b4 J
    39.                *** ***************************************** ***
      4 ^0 |* h) h0 A. [' E* Z4 G( T
    40.                *************************************************) Q) r- ~) I0 o
    41.                 ***********************************************
      : W/ A3 i3 e. ?; s7 {3 l
    42.                  *********************************************/ ?% _7 j; R$ e' h\" K
    43.                  *********************************************$ O% F9 z8 r) }  H. p' P
    44.                 ***********************************************& u$ ]8 V2 L$ d9 ?
    45.                 ***********************************************
      * I2 G. S1 I' ^1 D6 ^
    46.               ***************************************************+ N  ?6 p$ c( ]
    47.                *************************************************
      1 I* B/ D2 D4 S9 r0 c5 _/ X
    48.                *************************************************
      : x! T\" Z- g/ B. r
    49.               ***************************************************6 V% r* }1 X; L. Y) B
    50.               ***************************************************+ C\" E# s0 m) F
    51.          *    ***************************************************    *, M7 {+ }0 N& U/ M5 Q+ |
    52.        *****  ***************************************************  *****2 R# `6 f- ]; g\" ~) `1 N5 j; i- H$ ~
    53.        ****** *************************************************** ******
      / |6 [/ P* N& C' j
    54.       ******* *************************************************** *******. F$ }\" a) X# {* z5 Q
    55.     ***********************************************************************( l8 {) w/ H% |# {0 e
    56.     ********* *************************************************** *********$ X4 |, ^+ H: l, h
    57.        ****** *************************************************** ******
      ) `7 a4 X+ @+ n. X
    58.        *****  ***************************************************  *****. h; D& N, D0 X0 x6 x5 @9 B
    59.               ***************************************************
      $ K& U0 @: A\" b& v  b. z4 N3 a# |
    60.               ***************************************************  x; m+ {% i  m9 Q
    61.               ***************************************************
      0 a& S1 x, n. ~
    62.               ***************************************************
      - ~6 X+ C- M) B1 Y, C+ Q4 h
    63.                *************************************************2 y& G/ ~3 E  I* l1 ~/ k2 b5 ?\" E
    64.                *************************************************( O: i% A: N: B3 q4 W: d1 b% T
    65.               ***************************************************
      ( z( F+ U( b2 O% K
    66.                 ***********************************************! x) V! z( f1 E& [; \( ~0 E% J
    67.                 ***********************************************
      * P; j# U1 [2 K; }: k- Y
    68.                   *******************************************) d6 v\" R' G4 p3 \0 x4 S8 z
    69.                    *****************************************
      0 p3 f; w\" n+ |\" A' t  w
    70.                  *********************************************
      ; [  {9 Z: l/ ]: N
    71.                 **** ****************** ****************** ****
      6 L5 e. B& b6 K
    72.                  ***  ****************   ****************  ***
      4 q$ {- M- P$ ~% `+ m$ B: X
    73.                   *    **************     **************    *' A* B* P4 X6 U7 T2 U& c0 {
    74.                          ***********       ***********4 N$ ?; k: t9 X- e8 D% x
    75.                          **  *****           *****  **
      ) E2 W\" Y. H. I8 w! x
    76.                           *   *                 *   *
      + M- T9 c( ]4 u
    复制代码
    - h6 {* @& w/ d& d' S+ q) W
    运行时间为:/ O0 d" |" {' p! ?

    + i" B- u6 k% c# f        Forcal Elapsed 1.078
    $ d5 P; ?( f& }
    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-20 14:25 , Processed in 0.409602 second(s), 52 queries .

    回顶部