QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3071|回复: 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的扩充性能更好。* ?/ v9 ?0 l0 |' f" v' E7 F
    在大量函数调用时,Forcal更具速度优势。! \3 }' O  t6 O; P- x! I# [
    以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。
    ' u; C' F4 B8 ?& ?& s5 T, s
    4 |" x- L2 h# y& @$ C  Q) y$ P3 ^0 [例1:Fibonacci递归程序(n取40)+ \2 m" q/ ]4 D5 L
    1. SetRealStackMax(1000);3 r6 p+ ?/ o. O9 n% z) y: I3 d# O
    2. F(n)= which{3 g4 A, x\" e* I, V
    3.         n == 0,
      . T( S2 v! f, E
    4.                 return(0),
      $ {$ a& [: z+ m4 ^# G( i
    5.         n == 1,! z/ c) R: J% U7 U  G\" P
    6.                 return(1),
      7 E. [! C0 U' M$ S' v
    7.         return [F(n - 1) + F(n - 2)]
      4 v; M' e, Z. w5 |) a
    8. };/ ^; k6 C) D% t8 g) C; K  p( ]7 ]
    9. main(:t,n)=% {% u% a8 u$ Q0 L; D
    10. {& ]' {/ a* @3 F# b! q  u) y
    11.         t=sys::clock(),
      & R! n3 t! a) T8 i7 ~  U$ f* T
    12.         n=F(40),
      # H( g9 Z7 k( r/ f8 D+ m- m) t
    13.         t=sys::clock()-t,; r  D$ v\" z: M2 Y8 l  f
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}  n$ ^4 x3 s! y. s9 G8 n, z
    15. }; / A4 B& X# R. p+ r! Z\" Y; b, M
    复制代码
    结果:
    ( ]' h! S& z+ o1 n$ O1 J4 e9 L6 E- M  v
    fibonacci=102334155, fibonacci_Time=41859毫秒=41秒
    % Q% d# ?* K9 J% b3 X# H
    + n! M) ?/ x) M0 Q例2:八皇后问题1 k+ [0 ~. S8 i6 z2 r* e  @
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。
      4 A# {8 c7 R) G% {  R: T
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。
      / o  J6 y( H1 m6 h
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。- p' d% n/ L8 S2 b1 U3 l
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。/ T4 V$ w\" D8 Q* k$ O. {% O5 g
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。
      * l( j! s9 f$ p2 v! O3 @
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。; [% r% e7 o3 Z# z
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。\" X( d6 J\" i9 ^0 M5 X: N4 e! @& g
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。7 Z! n( c7 C+ g- \5 M; W2 S/ k5 ?3 f
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。 ( g' l4 l6 S: C& z6 M2 a8 h
    10. //Forcal源程序
      % R* ?! N$ m: H! ]9 R5 Y
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);* r5 U+ E3 [4 ~. s* f7 Q( |
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=
      ! |& ]( J5 y+ l
    13. {% V% f0 c/ r7 B- y  K# @- u
    14.     which
      . i: W& [1 a& r0 G( C
    15.     {   row != upperlim,9 P6 b1 E; C8 w6 O% i
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},
      & M- @, o) u0 }% h
    17.             while{ pos,% f& h0 p9 @! O& y4 ~
    18.                 p = and(pos,-pos),
      9 `7 I. b' c0 X- v. Q
    19.                 pos = pos -p,) R3 z; J1 v5 n5 F/ t
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))1 \2 j$ |5 ?( S+ B0 x: a2 i+ E' L
    21.             }\" [0 \$ s: ^# g: W1 |/ i) C
    22.         },
      4 H( x2 l- Y8 ?) V- B- d* x* E7 C
    23.         sum++
      1 c5 c! f. T' k- O
    24.     }: v  \( r6 u2 R$ P( w
    25. };
      5 K7 U- B' y% P0 U
    26. i:main(:tm,n:sum,upperlim)=% _; e& X5 v8 ?
    27. {
      1 k- P$ T/ |# V
    28.     n=15,' C; I# i+ r% Q' k. v* I
    29.     tm=sys::clock(),\" K% b! L, I( I: J) v- _: u  m
    30.     printff("Queens:{1,i}, ",n),! u7 }' y+ k- `5 f- v
    31.     upperlim=shl(upperlim,n)-1,! f! n; b8 y7 k1 N
    32.     test(0,0,0),
      / ~6 q& V& N: q, ?2 y
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)0 M$ s0 O. s! e: i7 Y6 r
    34. };
      4 z9 K0 {$ M\" c! O$ N$ I
    复制代码
    Forcal运行结果:
    * H" C: ?6 F2 e& j, }) s  y
    * ^! H- \  h8 S0 m% U    Queens:15, sum:2279184, 59547毫秒.
    8 y" O6 q6 x# N  q* W
    - i) u7 E5 Y& U& Z例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右
    % L7 W2 B9 ?5 N1 P5 g
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =
      * M: q7 X& _2 O9 U( _. R/ q& _, B; u
    2. {5 g, y\" Y  @, B) {* {1 u7 f
    3.         cr = y - 0.5,! t/ c3 {2 g9 Q$ M4 b( J
    4.         ci = x,
      5 B$ G3 Z/ g; E  s% h0 s
    5.         zi = 0.0,; ^2 P! ?7 E* o  F+ w3 Q& u
    6.         zr = 0.0,
      6 p- Y  {) u! y( c  U2 g
    7.         i = 0,  G; X5 M$ w& D
    8.         (1).while {
      . B! ^  z4 q  }, I( |' @3 k
    9.                 i ++,
      # E- y( `; P- f4 V6 }
    10.                 temp = zr * zi,5 F% I7 A; A\" @+ M
    11.                 zr2 = zr * zr,  k. j\" o; w# w& O
    12.                 zi2 = zi * zi,) o) T/ H7 [- o4 [2 b
    13.                 zr = zr2 - zi2 + cr,, W0 u* R5 Y' W* @
    14.                 zi = temp + temp + ci,! w/ D& I* b. v* P! n; x0 V, W3 _
    15.                 if [zi2 + zr2 > 16, return (i)],
      3 [0 @8 E% U: r9 b
    16.                 if [i > 1000, return (0)]
      2 C% j  h3 Y) K7 q% m( j: i
    17.         }, y/ [6 _, M2 s\" o9 T  l
    18.         
      7 _0 F' U\" n+ k9 W/ Y, S- c
    19. };
      & f  t$ i+ l' S$ o
    20. main (:i,x,y,old,now) = {
      3 g% U: d3 G( f: ~6 N+ D: m
    21.         old=sys::clock(),6 l3 k$ P' a$ V
    22.         y = -39,+ w  g. E7 x( m8 x
    23.         while{  y < 39,- {/ L' U8 B( D* U5 J+ u
    24.                 printff("\r\n"),
        L( |4 O7 y, Q; G( a& `
    25.                 x = -39,8 L5 Q& y& Q  p8 J
    26.                 while{  x < 39,
      . j8 N3 b+ Y* m* d& E% P; [6 m* `
    27.                         i = mandelbrot(x/40.0, y/40.0),- ~8 V. s. K' D/ _. T
    28.                         which{        i==0,
      + }+ }/ Y. R. Q6 Y
    29.                                 printff("*"),; C4 h\" c2 {3 Q4 T7 r% I' v
    30.                                 printff(" ")
      $ c( }0 a6 }/ A- _2 a  h& N
    31.                         },
      ) _1 e$ m$ q. F' U6 W
    32.                         x++
      , T4 B- Y& [5 c8 k# J
    33.                 },( k% I& D; |5 p4 W7 G. _4 |3 E; Y
    34.                 y++
      0 P2 z. \+ U( F4 a; d1 E4 y& Y* |
    35.         },9 t+ }1 r. N- A\" G5 p: @
    36.         now=sys::clock(),
      2 z& N. J6 ?  o7 r8 u
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)
      ; T3 Z% q6 I0 Z. t+ [6 w/ V
    38. };
      7 n8 Z4 r, K1 m$ `5 ^* ~
    复制代码

    * \7 |" w% g: a6 \$ ?  m7 \& l/ G+ P运行结果:
    2 }# `7 F8 s9 u& ]
    1.                                        *\" h9 }7 [) l& u( ]
    2.                                        *
      $ c* \5 J( L# X  G7 j1 l* q
    3.                                        *
      8 m$ Y0 d4 y+ m5 f9 J
    4.                                        ** t5 }) O: s- S$ I1 F
    5.                                        *
      - I' g, ^& o* u% K2 x6 d& I
    6.                                       ***+ t5 ^+ V& D7 t: l- n0 B
    7.                                      *****
      ' }& e4 Z, _0 h' _0 s\" |- t
    8.                                      *****
      , g6 Z' w4 j# K, _
    9.                                       ***
      5 y6 f9 Y2 w8 J& ~2 `( `. N2 q  e; [2 {1 n
    10.                                        *
      1 a7 B1 l/ V! D8 |9 }) ?3 \
    11.                                    *********7 t# G# N. J' }  H
    12.                                  *************
      6 }6 D- j* Z9 u8 z) c
    13.                                 ***************# B1 w+ y' ]2 [; M: S! A
    14.                              *********************
        c9 |& s8 }, i) `& }
    15.                              *********************5 F) g0 P& ^# X: C+ S# I
    16.                               *******************. e! |# C; ^5 ~' l2 n6 p
    17.                               *******************; J3 X7 ~2 B0 }' D/ L
    18.                               *******************8 @  M! O! `) v  C9 D1 b  q
    19.                               *******************- r( Z/ u\" s; o! i
    20.                             ***********************
      + B\" {: N( [8 N$ s+ q; p
    21.                               *******************
      ; B% T# \' J# b! O! I$ g
    22.                               *******************
        R( m, U0 q( ~( r8 Z5 d
    23.                              *********************
      ; }& A9 f, n! p
    24.                               *******************% u% \5 y% Z6 U5 [; z
    25.                               *******************
      ! R, O9 m2 i% e: ~3 P' R4 A
    26.                                *****************, u) H+ h# _( O' I0 U: S: U4 \' ]
    27.                                 ***************
      - a, |7 d; A; w6 c: u
    28.                                  *************/ Y4 h7 n5 E  ?  J
    29.                                    *********
      6 R- A4 J: j2 H) ]0 v) J9 F
    30.                                        *# ^) I0 o9 @' v6 d
    31.                                 ***************3 o3 X0 J* h; R- N0 S( X, ~9 U4 J
    32.                             ***********************/ O& R( r& ^* q' Z\" f' A' L( D9 H
    33.                          * ************************* *$ `& w0 t: |/ s3 \4 s
    34.                          *****************************9 M& n3 B5 f, R1 L$ _$ B4 b
    35.                       * ******************************* *2 j6 o: w8 v4 ^. F4 }
    36.                        *********************************# D$ R: W6 k9 d! u) c' ]) A
    37.                       ***********************************
      1 k\" F) o) @\" g2 }' W8 r5 h4 X
    38.                     ***************************************
      ' r# [* _( G  m
    39.                *** ***************************************** ***) _$ e) o) e% M
    40.                *************************************************% u\" ~+ ]: K\" J: G  M- H( ?
    41.                 ***********************************************
      . a: d8 i  x, i* ?5 \0 m1 ?  @
    42.                  *********************************************2 G( y0 ]7 t9 ~, `. K
    43.                  *********************************************. o  a1 E, @9 `% E+ L5 q
    44.                 ***********************************************! M( L+ @6 r7 V
    45.                 ***********************************************
      1 u, \- b+ V! e; G7 s4 g
    46.               ***************************************************
      0 L$ Y7 j+ l! a2 T/ }
    47.                *************************************************
      $ Z' ~) M7 i% [/ ?, k6 O! G) Q
    48.                *************************************************1 e\" w) Y  O1 y' e$ x# q  s8 S7 b
    49.               ***************************************************7 J5 w. R% q& }$ d# B8 y
    50.               ***************************************************
      + k8 m- Y2 o\" Q7 |. w9 |3 A* v% T& `
    51.          *    ***************************************************    *
      4 |7 q$ E9 A: U, e& m
    52.        *****  ***************************************************  *****0 N! X- V% y7 E4 e! e+ z$ p
    53.        ****** *************************************************** ******
      + E$ M0 Q0 E8 {9 i& b5 l6 y
    54.       ******* *************************************************** *******
      , ]# F& V* r# R+ \. Q' u  d
    55.     ***********************************************************************: y2 L& J8 z# M- m( K
    56.     ********* *************************************************** *********5 \3 F2 f9 n% ]* }( ]9 O
    57.        ****** *************************************************** ******
      \" T6 z6 T% ?0 b- Q
    58.        *****  ***************************************************  *****5 \4 a' |2 G) T( C4 v& D
    59.               ***************************************************/ m; o+ u2 e8 W
    60.               ***************************************************
      % r) J. u6 t( K\" L) n! V; |
    61.               ***************************************************
      + r) m+ Y3 H6 J% x+ J. h
    62.               ***************************************************
      5 l* v- Z0 z2 ?7 F! A# D+ v
    63.                *************************************************; F1 _/ ]. w5 T( ]
    64.                *************************************************
      5 C* ]' ^4 p/ t$ s% c; K
    65.               ***************************************************
      - _6 r; `2 I: C6 P\" ?) S
    66.                 ***********************************************: o' X3 B; Y& ~
    67.                 ***********************************************+ B: B  S. B/ X/ X5 e) Z
    68.                   *******************************************
      7 E. J2 b  h# h7 V
    69.                    ****************************************** i; N2 j# b: [7 p
    70.                  *********************************************
      1 F6 o$ A1 _! v9 l  X
    71.                 **** ****************** ****************** ****8 x% ?- Z) V0 @
    72.                  ***  ****************   ****************  ***. C, n' D6 m/ k; s- X' f
    73.                   *    **************     **************    *
      3 N$ k# t3 u+ V1 M2 O* j* d7 r
    74.                          ***********       ***********/ E6 z  p7 S& `- t* X% D% f3 O
    75.                          **  *****           *****  **
      + Q/ E6 q5 [+ Y- Y\" o, r* B. B  }7 }
    76.                           *   *                 *   *
      0 G0 O' s# m% J( n) X
    复制代码

    2 {3 d) ]2 q5 q8 h; A4 F8 t运行时间为:' g  y1 s! |( m/ ~& g2 C

    9 G4 L% f3 z/ j6 R8 K3 G5 {        Forcal Elapsed 1.078
    , e. N3 D! w: g( T4 M; A
    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-11-15 22:20 , Processed in 0.429560 second(s), 52 queries .

    回顶部