QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3252|回复: 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的扩充性能更好。& H* m: Q% i7 r; |# H
    在大量函数调用时,Forcal更具速度优势。& g" l  P( W3 _! ^$ L& T" X
    以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。
    5 f& j$ |/ K# x, P& r; q* O# C' E5 S
    9 d9 E4 i$ v1 O& b9 Z2 A) }例1:Fibonacci递归程序(n取40), Y8 b' o/ S# W, i( b& V1 g7 G
    1. SetRealStackMax(1000);
      & [8 r& Y3 g  v, b2 k: d7 u
    2. F(n)= which{
      - J& m% W. D. F8 l- [
    3.         n == 0,
      8 A3 p5 \( \9 n+ s2 R! W1 Z' i
    4.                 return(0),2 }1 Q  f( u\" h- j  L
    5.         n == 1,( B2 N% E: l! o  n4 b+ r) h
    6.                 return(1),
      ! j\" c$ I\" y8 R+ v- G
    7.         return [F(n - 1) + F(n - 2)]
      . u5 x9 x, U6 a: R
    8. };5 X! f$ ^3 T6 n8 A- R
    9. main(:t,n)=  ~3 Z4 ~2 J+ B1 q! K
    10. {, I% p( D. C; |. H1 F) \9 M# \1 b
    11.         t=sys::clock(),
      9 @  p, Q, R\" ^* U. A4 y
    12.         n=F(40),
      8 B) [! L0 U4 f. `\" s, A/ S) g
    13.         t=sys::clock()-t,
      ; X3 I1 m5 g9 X$ _
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}\" J! X4 v- i3 ^0 R0 k; S
    15. };
      1 b\" [4 K% J& J* n' Q
    复制代码
    结果:, i/ R2 C4 [4 _  a' ?9 `* g* s

    / I5 Z1 l1 j1 {. Ffibonacci=102334155, fibonacci_Time=41859毫秒=41秒1 [. I& n1 ?6 F

    3 }/ l; k5 ^: O" {4 `+ ~4 `' p例2:八皇后问题
    . V' }+ x0 B4 b6 D
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。
      0 M1 U9 C; [2 {) J* y
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。
      0 W, I6 `3 w5 P6 \# y3 }
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。
      $ L' w! A3 e/ r: L( ?& d, M  v
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。  m( O, B* [7 {* G7 H\" x
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。  y4 S( A3 O+ p# j% E. x
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。\" s' W# o3 n6 s5 m$ b
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
      ! T- c3 `1 P  Y
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
      3 Q8 d5 ^\" a$ W
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。 ; ?& L- q, S3 v$ Q& Z' |& }/ K& ^
    10. //Forcal源程序+ l' o! S! k  G\" F$ T. \1 c
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);
      ' ]0 ]* s2 x\" G* u/ O
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=
      1 e0 s& l# r# Z# Y* {\" F, p/ ^
    13. {
      1 R1 {* j7 ]0 Q- c5 B
    14.     which/ q6 e. s, V( x* G2 ?. e
    15.     {   row != upperlim,5 M4 T& x; X\" R/ X# j$ B! z
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},# ^, X. h; }  m2 V
    17.             while{ pos,) _: Z% B+ m9 d( _$ i: `& W8 `, ]0 f# c
    18.                 p = and(pos,-pos),
      , ~3 o' ?' |4 T! ^& P) u, E
    19.                 pos = pos -p,
      : T: D1 u6 r' O9 Z7 B- l
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))- n. y) x- ?* A; L6 s* [( y
    21.             }
      ) y& F9 d0 }+ F2 W2 [& @% D
    22.         },
      9 h: ~: `# |( E; l% P6 s4 E+ Y
    23.         sum++( e' O2 `: t3 b% ]8 P
    24.     }
      $ S  S1 `. q3 O' ~. y# Y+ T  r% c/ b
    25. };
      % U5 s  ]8 h2 j/ E7 L
    26. i:main(:tm,n:sum,upperlim)=, y, A1 g2 |3 l5 b3 Q
    27. {5 H. Q( w7 j1 P3 s( ^
    28.     n=15,' K* C1 N! a% |! e' c
    29.     tm=sys::clock(),9 {/ w3 c: N4 c3 S7 z' C
    30.     printff("Queens:{1,i}, ",n),
      \" n+ G7 z& v- j- Y
    31.     upperlim=shl(upperlim,n)-1,
      ( S; @, ~# l4 c& T. X' P1 a; k* b
    32.     test(0,0,0),5 f: f. E. j: l; R6 `6 G
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)4 ?6 S/ V: W+ u. s8 _! R! v
    34. };$ o2 P! Q6 y+ r3 j$ P+ K- I$ ]
    复制代码
    Forcal运行结果:( v3 @: L; p0 t

    2 V1 `9 {. ~6 [" X" [! m' `7 Q' k    Queens:15, sum:2279184, 59547毫秒.( ?$ ~; G3 H0 N  L0 s* P
    2 _2 Q6 L6 G$ V% o5 K
    例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右
    ( ^* W# z6 p, s/ n: n$ @$ ]
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =, G. e6 X' r! Y( i$ }
    2. {
      : [2 N9 {1 j: b/ c. D; f\" C
    3.         cr = y - 0.5,
      2 x, i( S% I8 K
    4.         ci = x,4 i7 e$ e5 ^9 C  ^\" C\" k
    5.         zi = 0.0,) s: X! w& R+ v4 g
    6.         zr = 0.0,
      # L7 s1 u\" [1 H7 |\" p% I
    7.         i = 0,
      . {1 M2 a+ h; O! ^' n
    8.         (1).while {
      : m6 g/ j4 y+ n  l$ x+ [
    9.                 i ++,6 _: J8 N2 n4 A& R7 _( i, t9 j
    10.                 temp = zr * zi,
      6 M- s4 O, D+ h
    11.                 zr2 = zr * zr,4 A, A: L$ ]1 b* g* ~  @
    12.                 zi2 = zi * zi,
      . N8 y; p$ v( }
    13.                 zr = zr2 - zi2 + cr,# ~6 r7 u' ^1 t/ C% D: ?. h
    14.                 zi = temp + temp + ci,* v8 f+ V  U: q9 V/ y# h
    15.                 if [zi2 + zr2 > 16, return (i)],' K\" j, W% Q( `% V7 e& y
    16.                 if [i > 1000, return (0)]
      , R4 x& y  b+ @; N0 C
    17.         }) ^+ {9 g: I4 P1 p! P7 q
    18.         
      8 G3 U2 i$ q$ J- R; J+ [\" I! R
    19. };
      7 _5 q7 ]; P- K
    20. main (:i,x,y,old,now) = {
      . c) u9 ~+ v  _9 L0 o. ^
    21.         old=sys::clock(),
      ; D\" H5 @- z) Q/ |
    22.         y = -39,
      + f) j) s) p) f: u- q, J8 {9 w: Q
    23.         while{  y < 39,4 V5 Z& H# Z7 J. \- [( X  d
    24.                 printff("\r\n"),2 i2 N% [4 X& U0 F
    25.                 x = -39,  l- n- u; T3 r
    26.                 while{  x < 39,
      % W- P* I. J5 W
    27.                         i = mandelbrot(x/40.0, y/40.0),
      8 o) W4 y$ n4 o2 p9 A3 }
    28.                         which{        i==0,5 |: }7 C7 G  b, o* r' n0 S( S
    29.                                 printff("*"),
      ( V* a+ k8 q4 Y
    30.                                 printff(" ")+ D* `4 s9 D6 e- h% @
    31.                         },# H% W4 v. a3 y3 U3 [: S1 @7 E# D
    32.                         x++
      9 f% O\" ?+ b! l+ F4 ]/ j
    33.                 },: G; I7 r) Z$ [# |( ?& B: |
    34.                 y++
      - \8 h# b( C, Y+ E) _' C3 Q7 c) _% P4 L
    35.         },
      - a6 X$ _- O8 T. \; n( n9 I
    36.         now=sys::clock(),4 b) `) d; F* o& x; j4 b( c% L
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)
      / F5 j/ Z0 K& E& B: _) ?9 x
    38. };
      2 y( ]. s, o7 \, x( S
    复制代码
    3 ^! Z* r3 d& H& Y1 j  k9 v
    运行结果:; S2 [9 F, K# v8 t0 _& K
    1.                                        *
      1 ?8 t% d\" D. _) g  W; K/ {
    2.                                        *
      / \. b0 z& c+ Y
    3.                                        *& S) i\" k7 G  Q# N
    4.                                        *
      4 }( u4 D- o2 X8 A+ `
    5.                                        *
      1 H\" h* f( n+ D: Z+ V: H
    6.                                       ***
      . L4 L; B/ q- e
    7.                                      *****
      7 ^+ U\" O1 Q( O
    8.                                      *****
      \" f; ?/ Y6 z+ `/ i. ], T# e
    9.                                       ***
      0 n9 M8 g) `; Q& ~  A  r) J0 Y
    10.                                        *
      3 A6 x  I' v' Q0 u/ `; d9 j
    11.                                    *********6 s7 a! m7 K) J\" H\" l
    12.                                  *************
        n% ~' i+ N- \& W\" n) c
    13.                                 ***************/ `+ ?7 @+ X9 q$ w# l3 q% D6 j- @$ H
    14.                              *********************
      8 h% U\" B- y+ Q) M8 ~9 s
    15.                              *********************! D! E% L8 [8 }$ b1 ^
    16.                               *******************, I6 A* D% N: B- |6 Q4 w
    17.                               *******************
      + U) l+ w8 B5 r
    18.                               *******************3 r2 q2 A0 O7 s
    19.                               *******************
      ( A+ }. `( w+ K. |* l
    20.                             ***********************
      + G: g7 l+ P\" M
    21.                               *******************  w  Y1 J4 r4 N7 Q
    22.                               *******************
      ' p7 Q: ^) }& |: J. \, r8 `
    23.                              *********************! }- C% d4 u( m0 [\" z. R
    24.                               *******************
      ' u) ?, X) z8 [: F: D9 L
    25.                               *******************/ x' P5 V0 M  [$ X! ^
    26.                                *****************/ Y: ?) H& p* e7 D+ B# ?
    27.                                 ***************
      * m9 Q$ y7 u& Q) @. M- g3 {5 f
    28.                                  *************
      0 o; A. m1 ~5 v6 k& A5 a4 e4 r
    29.                                    *********
      % B  R/ N7 r! m4 D( V8 I* @4 ~: L
    30.                                        *
      * O3 {\" C# o8 w
    31.                                 ***************
      . l6 [5 j0 z; p
    32.                             ***********************
      8 Z& ?  k6 x% y5 U\" O- _0 J
    33.                          * ************************* *
      3 ?( b0 ^\" a& A. V$ g
    34.                          *****************************. O, e; R8 G; q* k+ y
    35.                       * ******************************* *
      1 t5 C7 V3 p$ _! j; `\" _
    36.                        *********************************+ q: b/ ~  z* f: w# m
    37.                       ***********************************
      # U+ A0 u* V- j# j
    38.                     ***************************************
      * ^# H* l6 `/ Y- j+ s* `
    39.                *** ***************************************** ***3 k/ |- \! F+ M# ^\" i- x
    40.                *************************************************) e& S1 O; |3 R& [3 Z! h- O
    41.                 ***********************************************9 z+ H. n' J: H% U9 L
    42.                  *********************************************
      9 @' n7 n7 a5 S, H
    43.                  ********************************************** I9 Z' y& a# f# X6 g1 t
    44.                 ***********************************************  m! b3 `% m! z7 k% [3 H4 n
    45.                 ***********************************************
      9 o5 V( e1 a8 D1 P# n6 f$ N
    46.               ***************************************************0 c% }2 a/ |\" z% q( W
    47.                *************************************************  I\" h3 _5 j4 T. Z! g( Q0 q2 M3 X) f
    48.                *************************************************+ @( Z0 E: H1 Y9 e) I% ^5 J! n# v
    49.               ***************************************************2 u+ G* D, l) R- Z2 f+ S6 N
    50.               ***************************************************
      1 N0 q( ^, ^& g
    51.          *    ***************************************************    *
      ( j7 M1 Q' D' u1 w5 m' e9 m
    52.        *****  ***************************************************  *****
      6 ]: O: [\" i$ z3 Z5 a) R
    53.        ****** *************************************************** ******
      & e9 ^\" m6 j9 r8 y& i! A
    54.       ******* *************************************************** *******& M% Q# o: K7 G. a# s6 J2 J- ?2 ?
    55.     ***********************************************************************
      6 [# s0 P7 ~' V0 V( e
    56.     ********* *************************************************** *********. Q8 J: B8 L( h3 ~: C3 o) z: n- c
    57.        ****** *************************************************** ******
      * C: q4 S3 U\" u) ~4 F( G
    58.        *****  ***************************************************  *****. E1 L5 H+ F: t+ D\" b, O
    59.               ***************************************************
      . y; Q! r0 |; g4 m
    60.               ***************************************************
      8 k; R7 D) d3 u& O  q2 |# @
    61.               ***************************************************
      / }. @* _( w. e; \% Y9 _, v8 {8 T1 n
    62.               ***************************************************7 ?' P# E( E: ]! y0 E
    63.                *************************************************5 \! C3 s- |, M( {6 C
    64.                *************************************************
      0 ?8 r( J( X& ~  q# f% Y
    65.               ***************************************************- f: C- K) b9 f  U4 |; W7 N# j
    66.                 ***********************************************
      $ A4 S4 L0 S( ?$ S2 L$ X\" \3 g+ o
    67.                 ***********************************************- F+ I  ]- k' w& G4 N1 v
    68.                   *******************************************/ Q! @& t& Y( T* l* L, f) k
    69.                    *****************************************! o1 N, [4 K! J, B+ Y' M2 d\" _1 ~
    70.                  *********************************************# J' P9 n7 Q% g& Q* Z3 c7 Q! P
    71.                 **** ****************** ****************** ****
      6 B  \! {\" `' c7 g% H& l
    72.                  ***  ****************   ****************  ***1 e* n4 b; y; X  w$ P
    73.                   *    **************     **************    *
      , O  P/ ?\" x2 Y2 D: ]
    74.                          ***********       ***********
      ! K4 ]; ?3 Q) W/ K
    75.                          **  *****           *****  **5 w9 Q, s/ ^% H- Z$ M: @9 i\" S
    76.                           *   *                 *   *
      + c( r# \  e- Q/ [4 m, a3 j1 i' R# w! ~
    复制代码

    - \9 f. B$ i6 k! q( T1 y5 s运行时间为:0 U( c9 v: U$ `* v  ~

    : ]  D8 s1 D" n" N* [        Forcal Elapsed 1.078
    6 t0 |, U6 p) f9 @
    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 03:35 , Processed in 0.408918 second(s), 53 queries .

    回顶部