QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3254|回复: 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的扩充性能更好。' T3 }" K9 \0 d! p9 h$ Z2 P9 }
    在大量函数调用时,Forcal更具速度优势。. t& h0 B; z8 s% k! L0 k, i
    以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。
    % s8 b5 R3 N( M8 g* q/ k9 `, R& _0 B1 e7 q+ _
    例1:Fibonacci递归程序(n取40)
    % L8 `% j+ a' @8 M
    1. SetRealStackMax(1000);
      9 \8 S8 A3 @7 s
    2. F(n)= which{) x) g0 ~; T5 L1 d
    3.         n == 0,. k( [. g1 O0 E5 t4 I7 @  I4 {
    4.                 return(0),  D' i, N- T) \; Z* _  `4 F
    5.         n == 1,
      9 }\" r( X# l! o
    6.                 return(1),* ]) w  e. p* b. x% Z9 h1 V' j
    7.         return [F(n - 1) + F(n - 2)]2 ], ^- j/ U( _& ?\" L
    8. };& {8 @6 x3 s2 Q( k1 `0 `9 \
    9. main(:t,n)=5 z1 Q1 k/ ?( {- {; G: t
    10. {$ ?; ~$ _$ J: p8 s4 m$ @3 u
    11.         t=sys::clock(),9 h' g; F* X; ^' k8 z
    12.         n=F(40),
      * }6 Q( q9 m# C0 X
    13.         t=sys::clock()-t,
      5 c\" s, ?, L! H0 a1 H' g( `  Q/ T
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}0 Q8 z/ L$ V5 K; m! ]9 [4 r+ ?( m
    15. }; # q2 w7 X/ a: {0 F6 j' j( x
    复制代码
    结果:% D  k7 e/ v- M9 G$ B% R% C5 b* _
    0 Q, j# F. O$ y1 e5 Z+ i4 b
    fibonacci=102334155, fibonacci_Time=41859毫秒=41秒
    8 Q1 T) {% ~% X4 v
    * e1 l( a( {  ~. {5 c8 }; i例2:八皇后问题& s8 o/ d! _+ A" A: Q+ \$ k$ F5 P
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。9 g  S) p4 d6 q# O2 @4 z8 Y- h' ?
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。6 g# u4 R: d! c7 R1 ^
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。# J, K; e' U) b) c  v
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。0 E, @0 s# b- v6 a% l9 p, K5 N3 S- ]
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。- j5 ]2 e# f5 I% j7 w
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。
        D2 S, [: g4 w; @! D
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。- a9 Q# P7 K' D9 U. }; p, M  W
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
      / ^: ~: a& s1 N& I! h. P
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。
      : ?. ^& D, n8 N: Z
    10. //Forcal源程序
      ) f0 K' P2 |% q\" V. T  g  J. {
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);3 `; v; E' V3 p0 E8 u' \; \% M
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=
      - ]( Z/ x. Z; n, P
    13. {
      ) I- c& O, }* q9 H* f2 E1 }% c+ r, S$ L
    14.     which. `- q1 T- _. K, w. s; `
    15.     {   row != upperlim,8 P6 ]2 Y1 L4 V* C) P( D3 P
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},
      0 p& J, r: a) f0 I! o$ R* b
    17.             while{ pos,
      + `- r. a2 ?5 S( U
    18.                 p = and(pos,-pos),
      $ i5 J- N# `- E
    19.                 pos = pos -p,
      7 D5 r' ?, h% h( N, P  B9 Y
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))
      5 Z- w5 l) l! z  g% S: v0 b
    21.             }
      4 d) k5 I2 G3 T5 w0 l* Y
    22.         },* H- l: U* \! y( G# e6 d3 ?4 d% h# T
    23.         sum++
      1 k  l5 d7 O1 h
    24.     }
      - N& S; H8 J9 g8 W$ a. Q9 c
    25. };7 V! X0 r% l, t: a% y4 y
    26. i:main(:tm,n:sum,upperlim)=& s3 `$ F1 W5 i) R0 _
    27. {
      ( a. C7 O# D% j
    28.     n=15,
      \" T/ J* c; \/ \8 `
    29.     tm=sys::clock(),
      ' j$ z. M/ S! V1 z
    30.     printff("Queens:{1,i}, ",n),
      8 P- s2 i3 F6 y3 B
    31.     upperlim=shl(upperlim,n)-1,
      / u4 q1 n\" \5 ]- l
    32.     test(0,0,0),
      ! C\" }' T1 ^8 d: C\" V& P
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)9 T% j# J! s  n. w. S
    34. };4 S# w3 n2 O6 V! [- O\" H  t/ B
    复制代码
    Forcal运行结果:3 G- w+ M6 z; Z+ k; J6 U
    0 I, `: U9 Y- I$ U/ X" r
        Queens:15, sum:2279184, 59547毫秒.
    8 C( X0 q& z3 ^# W  h8 g4 T: Q7 h2 Y+ G, `
    例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右
      \0 N9 f. V) v& A! @3 e$ |
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =6 S6 y) e, O6 z3 s9 N
    2. {. A5 }3 q+ C, G* p\" ~$ C2 h% E7 [3 m
    3.         cr = y - 0.5,
      ' O; M! _0 @# v1 E% o
    4.         ci = x,
      % l3 ], b- ~- L) H2 @' c
    5.         zi = 0.0,
      1 Q' t; D- y) {$ m0 ~
    6.         zr = 0.0,' X9 A6 p3 k7 M$ e# U! }
    7.         i = 0,
      3 s! X6 e) f+ M7 s
    8.         (1).while {
      & K* h( u5 r( v\" t6 {
    9.                 i ++,. Q( l+ ]) V9 K! j+ `\" M/ g: F: ~
    10.                 temp = zr * zi,5 H0 @3 a, s# o: v. i
    11.                 zr2 = zr * zr,2 W! p9 p' [0 u- M
    12.                 zi2 = zi * zi,  C' r* C9 ~$ O4 p3 I1 {
    13.                 zr = zr2 - zi2 + cr,/ z  X6 V- N; S5 V/ o- u
    14.                 zi = temp + temp + ci,0 F* ~' U5 {* x6 M
    15.                 if [zi2 + zr2 > 16, return (i)],
      9 P% A) R1 s; z$ U$ T. j* R2 B
    16.                 if [i > 1000, return (0)]
      ) ^; p\" c' @  A9 ~7 u8 ]4 \
    17.         }. a: b/ @5 ]3 y$ w$ z, `
    18.         
      , C, w( m8 ]3 q2 D. a7 l5 c
    19. };
      * c\" p* C' d! Y! ]* r
    20. main (:i,x,y,old,now) = {* t4 f# V  J5 @1 G/ `
    21.         old=sys::clock(),\" y; r  `/ V& A- B
    22.         y = -39,+ E: o1 s0 u5 N3 m
    23.         while{  y < 39,
      % x0 A+ I\" Q+ X+ X
    24.                 printff("\r\n"),' R( w# @6 E5 A0 m& J
    25.                 x = -39,
      \" _( \( L8 E2 @  g1 @6 }) l) T
    26.                 while{  x < 39,( _\" |! [6 l2 t1 o# }, [5 B
    27.                         i = mandelbrot(x/40.0, y/40.0),
      . e, n9 z9 Y9 o6 {9 u3 c* e
    28.                         which{        i==0,
      : v) ]- R7 B5 R\" @
    29.                                 printff("*"),
      # F6 y' t  R! \! U1 w9 q4 g* e
    30.                                 printff(" ")  W# A& c) y; G3 ^
    31.                         },* O3 g8 g+ l9 Q( m
    32.                         x++
      , U2 P6 s# T0 U- I! x: ^- k. B
    33.                 },
      \" H& i  V: Y  ?4 A- ?
    34.                 y++9 [8 S2 I- J/ o0 u% W  d6 v* `
    35.         },# |+ \2 y. R- }7 h9 t, _
    36.         now=sys::clock(),% c( ^+ f( E# Y; k
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)
      4 b4 _' F: z8 ^\" u
    38. };
      % Y/ n\" Z% Z) k- @/ k! I2 E7 y
    复制代码
    9 U6 p. Y# U6 ?+ z
    运行结果:
    & A' y6 k5 V" t4 |. v
    1.                                        *& h7 B; N7 @5 g, {* D5 {
    2.                                        *
      \" {( {& W: s& U\" K0 ?2 P
    3.                                        *
      , q) I9 {7 M0 x  `
    4.                                        *
      5 V1 f* X6 d) ^+ \; b6 `+ q6 N
    5.                                        *7 ?1 n  k; f) l7 b8 @
    6.                                       ***
      / c5 d) \# S0 r
    7.                                      *****3 l' ]% P$ m/ x& t$ s
    8.                                      *****
      2 {  a) J% G  A3 u\" L
    9.                                       ***
      ) E6 j6 `3 ]2 F8 F# a* ~
    10.                                        *) m/ {' F$ t: s
    11.                                    *********9 F) w; c* X! d0 e
    12.                                  *************' `0 ]\" w# w5 b$ X3 E; q+ C0 G
    13.                                 ***************
      : p' c6 n* M; |, g5 F  q\" a
    14.                              *********************# ^/ o. W' n4 i; g! j6 h7 E; V
    15.                              *********************
      4 ?/ @3 d. y! I1 n
    16.                               *******************
      , u7 w$ g# d1 ]$ J' d
    17.                               *******************- C/ Q. F6 R; u3 ~: q. W  x6 \9 ~4 P
    18.                               *******************% I2 i; @) k, _4 }3 H
    19.                               *******************
      5 F: X3 Q$ R2 k% o9 A
    20.                             ***********************: [9 g# S! @; c1 o) C: b
    21.                               *******************
        j+ U' ^\" {4 o+ i- ~
    22.                               *******************
      ! d7 E' f# }# U
    23.                              *********************) R! I: I& U\" G+ O6 t
    24.                               *******************
      $ s\" S4 m/ D, E7 z& C9 Y2 S4 M
    25.                               *******************
      - ?% j\" k: K+ ^9 H1 b) u
    26.                                *****************
      8 t7 t8 s1 i! R' S\" {
    27.                                 **************** h2 k. X( f+ g\" x8 l
    28.                                  *************% M) o, P) B- `. Y
    29.                                    *********
      5 j, k4 W% [0 _$ z4 S' @
    30.                                        *
      % |; i\" _# s6 R/ f
    31.                                 **************** U( h/ b* ~) H% n9 s2 I; g& g
    32.                             ***********************
      ) o& @5 v& H0 b* a/ B7 ^$ n& M) o' d9 h
    33.                          * ************************* *
      . `% _) g\" `$ B. D! E; ~
    34.                          *****************************; A9 |$ K$ I! u
    35.                       * ******************************* *
      . p# z. q* e1 y' S
    36.                        *********************************
      , S# l8 ~4 l* F3 p5 M4 k$ [( V
    37.                       ***********************************
      $ G3 E& [8 y/ g2 I0 r
    38.                     ***************************************4 R! c% |. p0 k$ h; ~. i0 U
    39.                *** ***************************************** ***
      % H9 L* ^. [; @0 g$ x
    40.                *************************************************
      5 K; A( _, F) Q) X6 W  z
    41.                 ***********************************************
      8 X+ a1 `% z4 E# r* [
    42.                  *********************************************
      $ u1 ?8 ?7 _4 f5 V$ h% e' r: U# }
    43.                  *********************************************
      / [1 V0 x1 n\" O\" n' _1 `+ y4 p
    44.                 ***********************************************) o& ?: L2 }/ k: e
    45.                 ***********************************************2 q6 L. |! @7 O) M  _
    46.               ***************************************************7 f  U6 v% |4 C0 x
    47.                *************************************************3 Q3 L; F% I' ~& @1 o- w
    48.                *************************************************, V# @- [: }% r6 o- y: k% r+ F2 A2 x; E
    49.               ***************************************************5 N( g6 N( W. c7 B
    50.               ***************************************************, V7 y0 `+ t( k, b6 j1 q4 v' {, R: ?
    51.          *    ***************************************************    *( ^6 Q. e* i5 {4 w
    52.        *****  ***************************************************  *****
      ! C5 F# F; X* ?* S
    53.        ****** *************************************************** ******
      1 \) P; U, m, ]6 D+ ?
    54.       ******* *************************************************** *******
      ; k: d7 F8 h$ u9 z* V. h+ O# E% {3 Q
    55.     ***********************************************************************$ s3 G' p9 g6 L+ ]
    56.     ********* *************************************************** *********
        f2 B7 u; B$ e- j5 i1 i, F
    57.        ****** *************************************************** ******
      0 E8 J\" R1 j2 D2 z6 Z& [7 i\" Y
    58.        *****  ***************************************************  *****/ J, c, c\" I1 u7 V' ~. k0 u1 s
    59.               ***************************************************4 E# M0 i' M& W( U  ^+ }
    60.               ***************************************************8 b) e9 T\" q6 i  c1 A- _( M
    61.               ***************************************************
      / Z( \5 a3 g) H$ C2 R: z$ Y$ ~
    62.               ***************************************************
      ' G8 @+ t& i6 Y& D; f+ c) U; F) M
    63.                *************************************************! w9 C: s) m5 M: C8 h2 b, }
    64.                *************************************************
      6 r7 v\" \5 J9 Z& p8 L
    65.               ***************************************************
      ; K% e5 A\" A0 F4 B( y! R\" V6 N
    66.                 ***********************************************( W8 R4 K: y4 w* Z9 ^; o
    67.                 ***********************************************
      # W\" |: k3 T+ ^9 \, d9 B0 @! ~% _* @
    68.                   *******************************************
      ! R! d\" E* n* I4 s$ J# g& e) q
    69.                    *****************************************
      : B; z3 t: \$ B, |7 \% z& I) u& Z
    70.                  *********************************************; B) O! b2 v8 O& E+ m
    71.                 **** ****************** ****************** ****\" R! L3 |- m: G
    72.                  ***  ****************   ****************  ***5 x; }8 i4 J: v
    73.                   *    **************     **************    *) j1 x/ m. M; \' u6 R& A* A6 @
    74.                          ***********       ***********
      . v2 o9 @0 N! o\" d# i) b1 F
    75.                          **  *****           *****  **\" {7 @6 g1 ?( B  h( E: ^
    76.                           *   *                 *   *0 }. k' ]9 J, W7 A
    复制代码
    # V# f: v$ B3 T/ r4 Y
    运行时间为:! L/ _. r  p2 x6 W. R
    ! h  P" B6 W# x- E3 y
            Forcal Elapsed 1.078
    1 ~, D/ C1 A/ O- q+ @
    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-6-16 19:57 , Processed in 0.776117 second(s), 51 queries .

    回顶部