QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3246|回复: 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的扩充性能更好。1 F5 F  K" ]) ]5 u% j
    在大量函数调用时,Forcal更具速度优势。8 ^2 l, [# ?# A0 F) m& _
    以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。  J3 q' B- U+ q
    # k- Y" {/ e* f. p; }  T
    例1:Fibonacci递归程序(n取40)8 g$ U+ V5 P4 j/ e( N, [
    1. SetRealStackMax(1000);
      # L: @+ y9 @% g- o! R
    2. F(n)= which{
      $ b9 g/ f& R. S  S; R
    3.         n == 0,' a- M+ R! ?$ d/ T! u
    4.                 return(0),& v; ^5 q3 J! @7 W
    5.         n == 1,
      : J1 ^/ S\" ?0 m( s0 W+ k6 H
    6.                 return(1),
      : B- ~& ?! G- d! q; G& u3 U
    7.         return [F(n - 1) + F(n - 2)]. Y1 B6 K8 P- j5 x- T$ X
    8. };3 |: Y4 W3 C\" o0 S
    9. main(:t,n)=7 `. k: m3 c/ z& l
    10. {
        N3 O- a% @0 u
    11.         t=sys::clock(),
      9 h5 n' C5 p, W1 P% G' y
    12.         n=F(40),
      , V5 j, Q$ B  t; j% k
    13.         t=sys::clock()-t,
      # a\" u, f0 L- ]9 m7 z4 ~
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}' O' m. @) [6 q5 v/ ~
    15. };
      ( q; o, g2 M. B8 k
    复制代码
    结果:% s+ j0 w4 t6 L. X1 p
    1 M2 z( X- a' z* R/ C
    fibonacci=102334155, fibonacci_Time=41859毫秒=41秒
    ' n' d# n/ }5 q3 T, S$ {
    * }( J, J3 g  i7 F8 I9 Q3 Z2 u) H例2:八皇后问题0 g' U! s" J  U8 c0 ^& h" ]4 k! Y) L
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。  M2 J4 ~2 `. Y1 o
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。
      % S9 ~4 k$ J! x' ]- f
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。
      7 }4 \6 S- _+ n2 _
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。6 X$ B$ x6 y  c; x- R( Z
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。
      / o) f* O: ^7 p4 |0 o
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。
      0 x: o+ T, c3 j- t0 c$ L' n% g( o4 }
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。$ I6 e. B1 v; M* O. x1 c0 V* ]
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。$ Z3 z( `3 U6 p/ O% x
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。
      2 v: ~: o) c4 U) O! {2 U; q
    10. //Forcal源程序' Z( z5 n  j/ H0 b4 e: U  R
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);- T, s\" K6 g3 K! j, c/ X' _4 J
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=
      ) d$ t& Y% S  D( z2 v7 G
    13. {
      & O2 ?9 [. s! G. i\" f% O1 g
    14.     which
      ! E\" u8 A, H) Q- o
    15.     {   row != upperlim,\" l( H1 V. `$ j5 f\" z3 o' u
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},5 t9 c8 m5 c/ I7 s2 x( o# h+ r
    17.             while{ pos,
      9 X; \/ l5 j5 M' Z0 I* z, I% `
    18.                 p = and(pos,-pos),
      * Q7 j/ R1 k9 Y+ k\" ?1 d
    19.                 pos = pos -p,0 f- `. k2 Y0 P9 H
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))4 |6 J3 V8 \! y
    21.             }
      9 q3 G& p5 V- ~- n6 V
    22.         },
      ! x: P# O5 v: Y# l
    23.         sum++0 p3 j$ x0 l\" u7 a# B( }- ]
    24.     }: F- N* C, m# ~6 i5 H\" U/ I
    25. };
      # K2 @* x7 f- M* _2 t, E  ^
    26. i:main(:tm,n:sum,upperlim)=
      \" h/ M. h+ r0 T/ I0 t$ i
    27. {& K# e1 i; L\" j& _6 ^7 J8 C
    28.     n=15,
      + Y; l/ x, |# {& w9 N  F) Y
    29.     tm=sys::clock(),% D  Q. e* P0 {* V* Z7 H, a/ ^4 G' \
    30.     printff("Queens:{1,i}, ",n),\" a8 i) ?& l6 k2 ?
    31.     upperlim=shl(upperlim,n)-1,
      ; x9 v5 `0 _* J: e
    32.     test(0,0,0),
      ( \  g$ m: {' F* I( `# G$ g5 S
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)4 Y\" q( i, Q; D/ A2 A
    34. };) F7 Y' N; v2 D) {
    复制代码
    Forcal运行结果:
    , Z, R) R$ a1 f& l8 {- N* [# x" L9 q$ q+ Y1 W5 R# O/ c# `, W
        Queens:15, sum:2279184, 59547毫秒.1 J" d" R/ v2 H0 @: C
    ; m9 J, L. V! G' @8 }
    例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右9 H; H" p3 B; B
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =
      + u/ Q( J1 Q+ `  L, D: r
    2. {
      8 E9 e- |\" G2 L3 Q
    3.         cr = y - 0.5,
      ) o- _. F2 m8 Q6 O  i) P$ l' }- m
    4.         ci = x,
      ' E; F9 N8 I. ^8 }$ q
    5.         zi = 0.0,9 O5 i  Y- o) d0 X: S/ N
    6.         zr = 0.0,
      ) [6 {* p. g' O- g
    7.         i = 0,2 D0 W  C: ]& W+ k3 y
    8.         (1).while {6 ~5 V! x2 E, i6 `
    9.                 i ++,. a/ D7 s% H2 a' ]
    10.                 temp = zr * zi,
      9 u, ^( d3 `  ]+ ^
    11.                 zr2 = zr * zr,
      0 t$ l, _& D' Y# H
    12.                 zi2 = zi * zi,
      & N5 j; U+ ?# {- F* ^2 ?9 q, K
    13.                 zr = zr2 - zi2 + cr,0 k/ T# j4 s\" B+ x, l
    14.                 zi = temp + temp + ci,$ t\" M. H6 a! P8 L& D
    15.                 if [zi2 + zr2 > 16, return (i)],
      / Q! q' T& L, j8 d5 V! E
    16.                 if [i > 1000, return (0)]
        L8 _8 Y% m0 {3 \6 s' |+ H
    17.         }0 E8 V7 I; o$ m\" n! u( _% B. ~
    18.         
      : n3 v2 Z: l3 P
    19. };
      ( N\" J( y# R' y% x# D
    20. main (:i,x,y,old,now) = {8 N4 h! M7 D' V
    21.         old=sys::clock(),- J$ J9 i3 }! j
    22.         y = -39,; q& {: A7 j8 \- i, ]/ f& K8 R+ O
    23.         while{  y < 39,8 C$ i+ o1 p) r\" ]9 n7 S. o: {
    24.                 printff("\r\n"),
      5 C/ n! ~+ |8 l: Y7 R
    25.                 x = -39,# @3 i\" d) n- W. z
    26.                 while{  x < 39,
      \" H; O$ V8 ?7 M! @; c. x& Y: s
    27.                         i = mandelbrot(x/40.0, y/40.0),! P& b$ G& {# G
    28.                         which{        i==0,
      0 _\" g8 ], i2 S# r+ \( H: c! F0 X
    29.                                 printff("*"),7 Z: V% c0 F5 o8 o
    30.                                 printff(" ")
      - |. B1 L1 p6 R. b* I: Q; C
    31.                         },) Y1 }& t1 Q( H9 P* o9 r5 l
    32.                         x++
      7 G\" R/ ^6 i4 p0 k1 U
    33.                 },8 W( A8 |0 j) E$ {
    34.                 y++$ O4 ~9 f1 x* `* u9 E
    35.         },$ r. q/ {0 e0 L% r\" e/ q. l
    36.         now=sys::clock(),
      ' V  s; p; l8 _* W1 F* r
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)
      + X2 v& |! \! R( R3 N
    38. };+ V4 o( ^# \& m' d5 P2 h
    复制代码

    . R6 z# e9 |6 ?# |$ U2 Q- e运行结果:1 U8 t: |6 S3 ?* d: |% K5 w; c
    1.                                        *
      0 R8 R  u% O3 K4 J( K
    2.                                        *# e+ [& u! v' G- x  J  b; D
    3.                                        *  W0 Y% N2 i\" \4 }
    4.                                        */ |! U/ R- @2 p& f: p
    5.                                        *+ |7 x3 y  m6 S
    6.                                       ***& ]3 H7 h8 ~. l# _  C/ r0 j
    7.                                      *****
      + h: o. w  H2 n0 K4 y( r
    8.                                      *****2 }) J6 Z' C; \) Z+ d5 @
    9.                                       ***
      # O& B1 S9 Q8 P; W0 a, F
    10.                                        *
      ' |' r. Q# Q: t5 u
    11.                                    *********
      ! ^( h$ Q) K; c
    12.                                  *************- B\" T$ J5 S- t9 m' B
    13.                                 ***************1 B- i9 n- c( J' w# V. Z/ g
    14.                              *********************
      ' s\" c- M/ t1 T8 N3 Q
    15.                              *********************
      # h' o% g% C: C1 g8 N% w/ ^
    16.                               *******************
      5 m# ]0 r9 y9 c\" o/ r
    17.                               *******************0 y\" ^& ]/ l7 M/ q
    18.                               *******************$ J: V) ]  J5 D  D
    19.                               *******************
      ) M% }$ D0 J1 a4 s6 X8 h' {
    20.                             ***********************, g4 v' v4 u; |8 D9 N  x4 K4 Q
    21.                               *******************0 t8 X1 {! O0 X# C# }3 ~: R; E1 l
    22.                               *******************- k$ ]* |* }- G
    23.                              *********************
      1 K& P3 N0 X\" d\" C/ K$ ^
    24.                               *******************
      ; `* N\" M% \- }' q. Q
    25.                               *******************
      . u+ y' {* ~: g8 p1 r
    26.                                *****************
      % D; y' z% Y6 ^) t+ t6 Q6 R
    27.                                 ***************, ?) ~1 H: }* K& \6 K* `
    28.                                  *************
      ; Z\" v- x  p7 [$ u$ ]
    29.                                    *********
      ) L9 P8 Y7 C- D( w0 v8 s* u2 z
    30.                                        */ U: z( J) }* y% C6 F\" y1 n+ v
    31.                                 ***************$ {! W4 `6 f! D; @, N9 E  Z9 p
    32.                             ***********************
      ( x5 j9 {, h* N8 A0 l1 u
    33.                          * ************************* *  a+ N- i8 L; H) S% H! U
    34.                          *****************************
      & B( F1 |7 F6 w9 B5 Q4 ]
    35.                       * ******************************* *; v7 p3 W, U2 s\" R4 q- q
    36.                        *********************************/ p4 |0 g8 \7 [1 K, {$ H3 \4 l
    37.                       ***********************************
      ' U2 G% |- E% t! X* m9 g
    38.                     ***************************************+ k: r. |: e4 J3 `
    39.                *** ***************************************** ***9 e3 f: V# L. O
    40.                *************************************************
      . z! _% F$ G' {3 G' u
    41.                 ***********************************************
      / {3 j. e8 T9 ]3 c- F/ W5 a
    42.                  *********************************************
      . k( }9 Z& @8 {4 Y8 Y
    43.                  *********************************************3 S% r) G2 n! d0 V\" K
    44.                 ***********************************************- S# e, q\" {9 E  m
    45.                 ***********************************************3 b; q8 Q- ?. M( R/ x5 z
    46.               ***************************************************5 M1 x3 s' o8 o% ]
    47.                *************************************************6 X6 ~0 q! G8 m: W, ?
    48.                *************************************************- v) g) G  S' K\" \# b
    49.               ***************************************************
        M- x! K/ n3 H8 \. s) a
    50.               ***************************************************
      , {5 H( V( {& G, r; f+ \( j/ o
    51.          *    ***************************************************    *
      ; F9 n% G/ k0 C$ c
    52.        *****  ***************************************************  *****9 V. [, @0 W7 O, k6 S
    53.        ****** *************************************************** ******
      - L+ E* }1 k& m, k\" S( T\" ?/ @
    54.       ******* *************************************************** *******: K5 j! W  R& D* [, F
    55.     ***********************************************************************
      1 I& U2 _) H( U9 O2 u
    56.     ********* *************************************************** *********
      ) V3 y% W% K6 \* D
    57.        ****** *************************************************** ******+ t* h; K+ X& C# w! ^* I. c& V4 J; v
    58.        *****  ***************************************************  *****5 Z7 Q1 C( r$ U& Q' Z\" P
    59.               ***************************************************+ l, e' r5 t& i0 I, W* N# C
    60.               ***************************************************
      * Q' \' w+ f: h+ Y2 c: [) E/ c
    61.               ***************************************************
      & C, b3 E/ }, a; I  Z+ d
    62.               ***************************************************- u7 p4 S; m, X8 o5 r! _  g9 G
    63.                *************************************************
      , q$ H9 D& _# |' A, }% `
    64.                *************************************************
      + A7 N3 }0 c/ X- }5 h2 d/ V2 _; J
    65.               ***************************************************# S, B+ Z. F+ Q2 v5 f\" o0 |  x
    66.                 ***********************************************7 c' s6 n* {# c  z5 e7 p% T2 a
    67.                 ***********************************************& ^( n* `\" X8 u
    68.                   *******************************************# j' ]* E  V6 [9 L) q6 P1 U
    69.                    *****************************************8 L9 T) M0 {\" ?\" s( j* i
    70.                  *********************************************( I# K. D% u% s4 O* ^\" x% N
    71.                 **** ****************** ****************** ****1 {% Z5 ?- T3 _  C; P) p
    72.                  ***  ****************   ****************  ***0 f+ o/ l7 _+ t1 u
    73.                   *    **************     **************    *, e# t3 V6 Q% t) T' K# E
    74.                          ***********       ***********
      ' T\" j  X- o& D( x* @
    75.                          **  *****           *****  **
      ; Z4 s$ J( ^/ v* k# K9 y# ]# q( b
    76.                           *   *                 *   *# x/ J7 X9 ?! q: `7 k7 N
    复制代码

    ! K0 b0 N$ {( Q  l运行时间为:" ~9 V: b, I  T+ X0 V$ N( g

    # S/ d+ q  ~( @- @' j- f; y. `        Forcal Elapsed 1.0789 c6 ~" s1 E7 {' D# i' F' T
    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-11 09:30 , Processed in 0.424318 second(s), 52 queries .

    回顶部