QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3412|回复: 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的扩充性能更好。. W& i! q& r7 K
    在大量函数调用时,Forcal更具速度优势。
    9 Y7 D( p# x! K# C  I, D以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。
    - [5 |6 Z- c( T, ^) z
    " z) d) J. ?4 e1 \: i例1:Fibonacci递归程序(n取40)5 ^% F+ ~4 N' v  Z+ c
    1. SetRealStackMax(1000);
      , }. F6 }1 C& |
    2. F(n)= which{
      ' F- ]9 }* ^1 V  ?9 i
    3.         n == 0,$ `$ b1 l! x6 |7 G
    4.                 return(0),
      ' E2 b2 G\" k) i\" ^6 i0 M) t* T' d
    5.         n == 1,  b1 @) e3 e! ~7 k
    6.                 return(1),* S( ?: V\" `+ E# f; [' M0 r+ C
    7.         return [F(n - 1) + F(n - 2)]/ y2 ~2 [1 w/ r7 o% n9 {
    8. };6 `% F; D$ ]2 j1 ?$ H9 E
    9. main(:t,n)=& t5 K, X3 c4 @
    10. {- x: ^7 n& Q: f0 ]% |/ r3 C
    11.         t=sys::clock(),
        A* e% C\" w5 \! n5 t2 M1 i4 i- L2 l; y
    12.         n=F(40),5 o9 t  ^: W9 @0 ^
    13.         t=sys::clock()-t,& k0 D/ Q7 x9 z% I9 d3 ?
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}7 F2 {. S7 r\" ]+ \\" c
    15. };
      9 v7 j% W6 `9 R- F3 M* B
    复制代码
    结果:5 C: o' b2 o1 O2 n6 P
    5 R4 O1 d1 x) p: s
    fibonacci=102334155, fibonacci_Time=41859毫秒=41秒
    0 \, Q+ Y$ {* \; \4 u0 `7 n$ L3 d+ W9 _) s2 Z8 F+ x2 R7 Y, [
    例2:八皇后问题
    - }1 P2 i4 h5 K" y' @
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。
      3 N- ]- K, {5 M2 y! `- K3 ?
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。1 L6 K3 M! j6 A  s/ Q: c2 X
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。+ h, O* i3 z2 I* ~# Q
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。% D1 p2 D  j% F2 F& x
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。
      0 Y' o, @1 n- e' S1 V9 }
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。
      - W, A\" \% f+ _% y
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
      ; j( \0 X# q8 W/ s) Z9 m1 C* c
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。7 O' H! D; F& A  I: N  g; ?3 i
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。 * ?+ m( v6 A! ^1 H
    10. //Forcal源程序
      ( j6 E& f5 E, e! k, H* B6 V, {1 A\" G' P\" ?
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);
      ! S) A4 `7 a6 O1 f* A
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=3 d+ t& t! z3 \0 ^
    13. {1 j6 n  w! t\" J! s' _0 M/ |
    14.     which
      6 ]\" [$ I) h: m- o$ `/ S& u
    15.     {   row != upperlim,
      0 [# ~+ j3 q/ J* o# p
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},
      * ?( _5 H& F: k# m: T: `
    17.             while{ pos,9 k2 b  V1 c0 g5 K5 q2 l
    18.                 p = and(pos,-pos),& }5 J' h0 ^$ Y  O: w! x8 [$ Q2 \% n
    19.                 pos = pos -p,
      8 a  j0 w) F+ Z9 g% @* P( x
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))2 [# p* j) o! I4 l' C, h, V2 [
    21.             }
      # G3 [8 A+ E- z( y$ P, k
    22.         },1 s0 v; \% ]\" J6 G4 v; U
    23.         sum++1 T. K( N) L7 B- d# u
    24.     }4 y6 i( d' T\" b* b3 U& D4 |
    25. };5 ~5 p\" V5 _. g
    26. i:main(:tm,n:sum,upperlim)=
      * d9 u7 C& [& S1 U3 a$ M
    27. {
      $ h4 Y$ w: O\" n9 m6 T. f
    28.     n=15,8 L/ W4 z( }+ }- \
    29.     tm=sys::clock(),
      2 m0 N7 I* m; x+ J, A8 @' l
    30.     printff("Queens:{1,i}, ",n),
      8 o* \5 g* k( v' A* D- f/ @
    31.     upperlim=shl(upperlim,n)-1,
      ' ]! j3 {2 C1 Y9 q
    32.     test(0,0,0),1 i' s4 {& B* O( Q; \1 j+ }
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)
      ; }- v1 ]; _+ h2 _+ i\" I0 W1 U5 Z
    34. };- H8 G; b8 E4 b: u- z' D- A
    复制代码
    Forcal运行结果:( R& f, i* A3 \2 x: Q: [

    * i2 S0 S* J9 \5 b7 ~    Queens:15, sum:2279184, 59547毫秒.! Z- t  \( |" ~; d

    . F$ v1 i6 V( P% O; f8 c* x例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右4 `1 Q( s0 e  q# S. s- z% d" l
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =
        ]: `' v* T2 a( T
    2. {8 s2 Q4 g, y( F$ @6 J
    3.         cr = y - 0.5,
      & u  I6 ^% {# d4 i0 r; F
    4.         ci = x,
      . j3 `( \: E. C. X$ E- V. E9 T
    5.         zi = 0.0,
      6 u6 v5 \) L3 }- q* S' m) }
    6.         zr = 0.0,
      ; l, Q# y5 J+ z\" K
    7.         i = 0,) c9 O1 i% l; b8 ~: s( R! r& z
    8.         (1).while {\" @: G\" G; q# S* h
    9.                 i ++,' |; L6 X( `4 o. c
    10.                 temp = zr * zi,
      4 }5 o+ A6 |3 l4 h* `$ n4 @
    11.                 zr2 = zr * zr,0 q$ J$ A% }+ K9 b% D5 }; [
    12.                 zi2 = zi * zi,6 D# k0 K  u\" u6 Y# ]
    13.                 zr = zr2 - zi2 + cr,
      & z) A9 W; N: W: q2 p& T# `1 c/ m
    14.                 zi = temp + temp + ci,0 o, B7 J- S8 n# p% d  S  `\" ~
    15.                 if [zi2 + zr2 > 16, return (i)],
      , E/ j: A0 V7 S0 `& z4 {4 L
    16.                 if [i > 1000, return (0)]
      0 J0 I# }' Y9 Y/ n8 J5 m2 o
    17.         }3 _* |( Q9 ~; X6 c, G! m/ a
    18.         3 Q! B& V2 ^/ i1 `- _# [/ |
    19. };: L2 Y. m* c, {( X+ c+ m
    20. main (:i,x,y,old,now) = {5 ^1 _$ j\" Y+ Q7 R+ P% `
    21.         old=sys::clock(),
      , z7 a. c2 |# @' B1 o0 M4 I
    22.         y = -39,
      5 Q1 e! r1 Z\" Q& f0 V! `
    23.         while{  y < 39,
      ) \; ]; _! A* l. w\" I2 o
    24.                 printff("\r\n"),
      1 Y1 a! _; k+ S
    25.                 x = -39,
      8 Q, j( z; u9 F9 H
    26.                 while{  x < 39,
      ' @( i: Z6 B2 a; r
    27.                         i = mandelbrot(x/40.0, y/40.0),, [* Q9 s: Y8 K5 x5 R% ~
    28.                         which{        i==0,
      4 |; p$ F* ^) ]& \, l
    29.                                 printff("*"),
      6 u% b1 c( ~5 K5 x2 J
    30.                                 printff(" ")
      & @1 ]: v& P$ N0 D: |
    31.                         },( ^$ R+ C* c. Y# ~- G6 O
    32.                         x++
      \" ?# d* y1 G/ k: e
    33.                 },
      8 b% n, l; i* r( {, f7 S4 X
    34.                 y++
      ) M\" n* W3 q8 j\" c( L
    35.         },
      \" H7 k- Z* a* D# f0 M/ K8 J$ @
    36.         now=sys::clock(),
      : R$ R6 p& b9 Z* g8 H
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)
      - _( A8 v+ U7 U! E\" Z) H. H
    38. };( o9 g$ i' r/ Q9 Y
    复制代码
    2 {+ B4 k) H4 t8 {- J" X  B2 q
    运行结果:5 d0 b. Z+ s- O! Z$ z) p" r
    1.                                        *2 |) F6 C% S, m& E2 W
    2.                                        *
      4 Z! |0 E+ C\" ^4 y! @3 Z/ Q3 g' D
    3.                                        *
      ; G7 I, R5 F# @( M
    4.                                        */ z) h: S# u9 K\" d
    5.                                        *
      7 y; t' x\" l, E. |
    6.                                       ***, w  s* U8 H$ c# X% h2 u
    7.                                      *****
      + m. C% [; V\" G. ?. K) T* ^
    8.                                      *****\" V# l7 Z; y- q. i
    9.                                       ***
      7 m( L6 J. a: o3 z( ]( V7 p
    10.                                        *, \+ V% w9 \# w8 H
    11.                                    *********; ]3 ?; d5 ~8 e0 H, u5 v' n7 e
    12.                                  *************. y5 D( W* A' j8 r* o
    13.                                 ***************% R3 G( \\" c& z\" X
    14.                              *********************
      * V$ [\" h% b: W- {, X2 t9 S5 \7 S6 y
    15.                              *********************9 k: e* W: t4 p: t% y- J
    16.                               *******************6 N4 p* W$ D# ]1 p) w
    17.                               *******************4 H; ]+ w* g+ }\" m, g4 |$ d4 n8 H
    18.                               *******************4 E( Y! K+ X* D, y
    19.                               *******************! y+ \( o2 P& S\" j! Y/ _
    20.                             ***********************
      5 a% V: [- ^, v, Y; p5 K) v
    21.                               *******************
      9 }7 W1 P, o9 s/ O! I9 r
    22.                               *******************$ V( F( u\" I; `  y6 h
    23.                              *********************: H3 i! W0 Y! I
    24.                               *******************) B1 o) V( o7 |6 c. `
    25.                               *******************) A) X, W  {0 I
    26.                                *****************
      : ]; D! R3 O/ v' e4 }) s
    27.                                 ***************
      5 r# c- L( f6 `$ h6 v+ u/ f
    28.                                  *************) x  N2 R' M9 D9 x: ~: y6 m0 B
    29.                                    *********$ y4 s9 i0 @! _- l6 h7 D
    30.                                        *
      + o) e  F, D  y! e$ E; v0 z* z
    31.                                 ***************
      $ V! {/ O3 l2 m. J5 D$ O
    32.                             ***********************
      , m) H7 h  O4 O9 e. n' P. U1 m2 R
    33.                          * ************************* *1 E! u+ q6 G0 z* Q! l+ w
    34.                          *****************************
      . n6 l5 p% ^3 L
    35.                       * ******************************* *
      % X# Q  C1 `: D. X1 M+ d0 h0 y
    36.                        *********************************
      1 }  @, w) k) w, T$ I: @
    37.                       ***********************************
      - }% g- K: n) R& G0 U* d5 Z
    38.                     ***************************************
      + |) c& n$ _2 O# V. ~! A
    39.                *** ***************************************** ***
      3 R# ^  L* {& Y5 H: {5 h6 v3 ^1 E
    40.                *************************************************
      4 w! H7 t7 h  T* {+ f# x
    41.                 ***********************************************\" L0 u* N3 T$ m  r# H- O% Q
    42.                  *********************************************
      * ?' O& h& w. Q& }' H2 x1 p
    43.                  *********************************************
      ; t* \\" x, S3 `/ ?$ C0 b7 ?! u
    44.                 ***********************************************
      & ^$ e! V. a0 F8 x7 O8 L( w( L; r7 @
    45.                 ***********************************************
      1 s& I, v\" P) L
    46.               ***************************************************- f# G% W9 o# C+ J) f
    47.                *************************************************( o* x  x! R; V/ D% c; A
    48.                ************************************************** d% p& S1 z% l( ?$ C. v+ F3 x
    49.               ***************************************************, a: [. _- ~/ K1 ^! a
    50.               ***************************************************
      - i! g; d$ w: a
    51.          *    ***************************************************    *5 \6 i4 w+ L& |: d4 o
    52.        *****  ***************************************************  *****
      - _! M  a: P: v: w2 f/ m( }; n. `! I  J
    53.        ****** *************************************************** ******: S0 Z! Y\" c  l9 ]' a
    54.       ******* *************************************************** *******4 K, {( X0 E# k) ^) G* K; V
    55.     ***********************************************************************% b2 @% K7 M* N9 p
    56.     ********* *************************************************** *********& _) e: S& B$ Y! ~0 R
    57.        ****** *************************************************** ******
      # ~' {3 P& [' M. X$ z
    58.        *****  ***************************************************  *****9 b! C- ^5 ?! B. A' e
    59.               ***************************************************
      9 t+ o2 z! c\" l4 z
    60.               ***************************************************
        S# |8 W+ i% T- [0 d, w
    61.               ***************************************************6 |$ Q: ]3 z+ F% S0 ^5 z
    62.               ***************************************************
      $ n9 [* A2 B, v; a
    63.                *************************************************
        R9 R1 M\" Q+ p: c- h! R
    64.                *************************************************
      & m! b7 t0 x& v% a\" E
    65.               ***************************************************$ G( O& L1 Z& S\" X, c* g4 J
    66.                 ***********************************************
      $ C5 v: z& g7 x- h9 r0 v1 G
    67.                 ***********************************************
      ) R8 t8 x/ h/ F' N
    68.                   *******************************************2 j; [\" I) {  J6 ~4 Z
    69.                    *****************************************) f! _) i0 m( ]4 Q/ }& U8 c  O% B
    70.                  *********************************************2 R& F\" N: Y+ T0 s
    71.                 **** ****************** ****************** ****
      , V5 w% W* b% J  a. [
    72.                  ***  ****************   ****************  ***
      , P5 E' g. _8 w7 j$ B
    73.                   *    **************     **************    *8 Y+ O5 C/ s1 W5 L$ ?. l- _
    74.                          ***********       ***********9 N+ v7 C' l$ ^3 V: `
    75.                          **  *****           *****  **
      & \, o) k' Q+ J. q* {\" {, J: l) K
    76.                           *   *                 *   *
      ) l4 i8 }) \. \  G$ l9 c# B; o
    复制代码
    4 j9 ~0 I9 |4 ]3 s8 u9 T
    运行时间为:$ M, q3 |# Y. \0 z. w* b5 c$ j
    1 B/ x# f5 t' s) E1 _6 L1 a
            Forcal Elapsed 1.0787 H, O3 b: S. G. K; w2 i- Z
    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-10-22 09:29 , Processed in 1.839491 second(s), 51 queries .

    回顶部