QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3070|回复: 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的扩充性能更好。
    ( S' y+ y5 a# K6 _2 l( G在大量函数调用时,Forcal更具速度优势。) x. K6 F5 a0 \) H9 c
    以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。
    + E+ m+ B& U8 z; W$ A4 D/ e
    9 x4 Y1 N* L- q% a例1:Fibonacci递归程序(n取40)
    . Z& U' A- D) I2 T) ?. i/ l
    1. SetRealStackMax(1000);/ n/ M, ^6 O+ I5 ^* i# }7 L
    2. F(n)= which{
      # v. `0 Z( F8 P* i
    3.         n == 0,
      + t: p  u- k7 L\" u, s8 \' f
    4.                 return(0),& r- x3 [4 S% q3 S* H! T9 E  H
    5.         n == 1,4 ?. C/ h) F5 q% i. }3 r
    6.                 return(1),. P( h6 O- ^7 p* T8 }: f
    7.         return [F(n - 1) + F(n - 2)], K8 T5 U, w' f1 ]+ z2 C7 w
    8. };
      6 ~$ M- ^8 G; P8 l
    9. main(:t,n)=3 K  A, Y0 A: x1 b3 J; n! p' J8 z) }
    10. {  `: u/ E4 X7 b* \7 r
    11.         t=sys::clock(),
      ; |$ |& e) A+ ]/ ^/ h
    12.         n=F(40),
      8 f& R: J- _* y' S! V
    13.         t=sys::clock()-t,( r& k6 ^/ R/ x9 I1 K
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}, v/ `, I% K\" R0 e
    15. };
      : B# \( Z; I. d. s5 H
    复制代码
    结果:
    ) A" S: `, L8 N/ f8 m8 r  p+ _* X  O
    % o& P% p& N3 F2 F3 B5 r( Hfibonacci=102334155, fibonacci_Time=41859毫秒=41秒7 b& }/ s& {$ L
    & T; ]9 |5 u( x; P  H) N) I
    例2:八皇后问题  s- T# q- x0 ^9 s) v
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。: ^7 P/ A& }. @  T\" @
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。\" }, S\" y' Y+ Y
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。
      ! L- [3 Z. N' t+ }' L) ]
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。$ }6 Y6 v+ a6 l$ X3 o
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。
      - v. q. u: ^1 J6 \) g1 U/ x
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。+ ?3 c) s9 r* F
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。$ S\" [3 [* m# f5 X  j  g1 X$ k. F
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。7 C. C\" l; T- H$ g5 @4 S+ W
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。   t3 G! r1 H- z
    10. //Forcal源程序
      0 l' g\" X! Y( ^2 H3 w* y5 v9 O
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);
      , P% r( H0 A. J! J
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=
      ) `; j3 f\" o% C  g& {9 Q1 h
    13. {
      + T* e\" |  G* F7 b- o, J
    14.     which
      7 l7 ?  r$ {8 f; ]* W+ L
    15.     {   row != upperlim,! ]: h, Z2 D1 [6 @9 }9 T
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},! w2 B  h8 W% w/ I7 _
    17.             while{ pos,4 s4 Q7 z\" R3 I6 N' i! b$ f
    18.                 p = and(pos,-pos),
      . {% C2 X5 N# H! m: z1 F7 {
    19.                 pos = pos -p,1 \3 Y5 I6 n; x; u% ?2 `6 z9 j
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))\" f+ p$ g- i) x5 t
    21.             }  \8 I* Y7 [  k( g8 t* z
    22.         },
      . |- O: {6 q& N5 R1 W3 W
    23.         sum++8 w) i, _. B9 w
    24.     }
      / X# X; |, k9 z, M; |) R, T
    25. };
      . g6 p! j6 K$ l, G; Q3 n
    26. i:main(:tm,n:sum,upperlim)=* i) T1 P# A5 P4 w  F6 g
    27. {0 e4 i/ [) l! f+ c
    28.     n=15,- B4 r  q0 f+ M& f. M
    29.     tm=sys::clock(),; F; W  N$ \+ z/ K, G0 k2 o, ]+ c
    30.     printff("Queens:{1,i}, ",n),7 D  C9 F1 R1 n* ^% c
    31.     upperlim=shl(upperlim,n)-1,- l  f  k( x6 ^\" b: q* m0 Q
    32.     test(0,0,0),7 E& ~& d) v4 c% }8 m
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)) f  Q2 P/ p6 {+ o$ M
    34. };$ ~5 \, |. ~, U; y5 Z
    复制代码
    Forcal运行结果:' R/ K' A2 F/ H- S

    $ @, U/ R; V/ ]  B' u5 N    Queens:15, sum:2279184, 59547毫秒.9 ^# j- t6 F8 r; D& Z- g

    - v; X8 k$ e# ?, f6 H+ u2 Q例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右, X) M/ X' B0 x) C# }& `
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =
      : E  [; H, w9 e. |+ Z0 ~: k  s. I6 z
    2. {
        \+ {' e( ^4 l5 a
    3.         cr = y - 0.5,, D% b. f1 {6 J) \- f
    4.         ci = x,! [2 e% T% h' w1 y6 [
    5.         zi = 0.0,( O- t# e1 s3 v5 }
    6.         zr = 0.0,: ~* T) L: o6 F4 d5 i0 A
    7.         i = 0,
      * l0 D; A; G' l5 P5 @
    8.         (1).while {$ c! Y# [) C, N$ Q, |1 Y- {
    9.                 i ++,
      # v\" h! f# {9 `/ V: N' e
    10.                 temp = zr * zi,- R7 T  E! `  n* @$ k* G! Y
    11.                 zr2 = zr * zr,% h, R, K( H: n# G5 y0 W1 {
    12.                 zi2 = zi * zi,
      & j, g1 u/ a5 Y3 J( O4 {0 D# a
    13.                 zr = zr2 - zi2 + cr,- L+ i: ]\" k) e' V- ~4 ~  L; F; _4 l
    14.                 zi = temp + temp + ci,
      ( v: R3 X! H% F0 v, C; Z2 a8 X% H
    15.                 if [zi2 + zr2 > 16, return (i)],5 s8 j) f: ~& K: g  S
    16.                 if [i > 1000, return (0)]/ M( l! R, ^, ]
    17.         }) Z$ h1 [\" p' X  L
    18.         
      ; l! a& m( L) {( r# W
    19. };
      5 s; W/ @- ~$ }  n1 c
    20. main (:i,x,y,old,now) = {
      , \/ T; J9 h' X( g
    21.         old=sys::clock(),5 F; J$ k& s\" m
    22.         y = -39,
      8 v# j: l) \$ a6 ?
    23.         while{  y < 39,2 D4 s/ E6 s$ y7 u
    24.                 printff("\r\n"),
      * d4 H/ B& E* k! B) Z
    25.                 x = -39,
      - c! s3 K# u' A
    26.                 while{  x < 39,
      / y7 Y8 X& c! G7 z
    27.                         i = mandelbrot(x/40.0, y/40.0),
      \" i/ T\" S+ ~0 U7 D
    28.                         which{        i==0,
      ' ?2 N7 n% L* v+ I
    29.                                 printff("*"),
      + S5 \. |( B: B6 j& ^
    30.                                 printff(" ")! }8 v, Y3 W! n$ s! V9 F+ N: S
    31.                         },
        B4 N5 V2 E; X4 a1 P
    32.                         x++
      ' l$ g6 u% ^\" z7 P& F
    33.                 },
      ; B) ^* _' I- n9 ?) w
    34.                 y++
      : P6 u  I/ [0 s& f
    35.         },
      - y; o: w; s6 g# b
    36.         now=sys::clock(),
      $ Y/ A1 `5 K: N\" s4 [6 P, Y% L
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)0 v, i0 \, ~, b: g1 A. F% p
    38. };
      . [5 I* s; b# j. U# \
    复制代码
    ' \6 l. S! M. n5 E# c* G
    运行结果:
      N2 A0 x3 }( G' b: s
    1.                                        *
      6 {3 ^7 p4 x8 n# h. w' }
    2.                                        *. }# w; k+ v: e2 v# v
    3.                                        *
      : H8 D, n: @6 [! f% H$ M) ^; x
    4.                                        *; f8 P7 f0 y. G/ l
    5.                                        *. Z2 R# Q( z) t# B1 e1 a. F! M
    6.                                       ***( _5 O8 U. G! o
    7.                                      *****
      / ~. {/ c, W  W+ a
    8.                                      *****
      1 n7 \& x7 A8 l# k/ u
    9.                                       ***6 d+ z, A6 ~7 M6 ?% n
    10.                                        *
      ; U5 V3 w% Y! N- m. W
    11.                                    *********2 @: X5 F2 t- T4 a( Y# x: O
    12.                                  *************0 m2 H6 n& p1 l; ^/ K/ D. o& ]5 M
    13.                                 ***************
      # I5 \\" E+ H3 d9 {) i& @
    14.                              *********************% p) x3 t9 C- T, ]  V. H
    15.                              *********************
      3 N7 c. m0 Q7 |( t7 C
    16.                               *******************, a- i: E% \7 T* {/ Q, c+ d
    17.                               *******************6 y\" L$ \) `. T) o9 d
    18.                               *******************
      8 c  o7 N; Y: z  l/ J; ?! J
    19.                               *******************
      6 y6 Y& k) S; W% F) u* |$ n% F
    20.                             ***********************
      * _7 X( ]( T7 L1 U8 [9 r
    21.                               *******************\" U) F, V- v. U$ ]
    22.                               *******************4 X: U6 T6 j, B$ _
    23.                              *********************
      1 I2 R4 j- ?; b* I4 k3 ]6 ?
    24.                               *******************1 J- @) T, o2 Z* l7 |; \
    25.                               *******************\" e! J2 w& y# ~( v1 o, I9 k
    26.                                *****************9 y$ }5 k7 E0 w: {! p7 ~$ ~
    27.                                 ***************
        X. q! E( g1 F5 G) q6 V: N0 q
    28.                                  *************
      - W\" ~( Y3 F& v& z; n
    29.                                    *********
      + G- @7 q3 S1 A0 k- ~* j
    30.                                        *# n9 {1 B\" G* }\" }( Q\" J
    31.                                 ***************- F! x0 P; Z: a
    32.                             ***********************
      ! @# m# h& E8 o0 u1 t3 V
    33.                          * ************************* *& D1 l1 v( ]2 m8 d. L9 N
    34.                          *****************************
      / ]7 s! o5 V$ A% N+ x& E% p. h
    35.                       * ******************************* *8 M* G# w/ c( m7 B
    36.                        *********************************% d9 J! h. H5 L8 i
    37.                       ***********************************3 S. c4 m0 u2 o7 ?. i1 Q# ]6 r
    38.                     ***************************************
      \" ^6 ^' T1 }1 b
    39.                *** ***************************************** ***
      $ e$ c2 u7 o. K' t( h9 L/ W, E
    40.                *************************************************
      $ z5 N' Z1 M2 Y
    41.                 ***********************************************
      / L1 Q1 P' Y0 ?/ n3 X+ p\" |
    42.                  *********************************************
      1 k) E+ P; u4 T+ P( ^7 U6 I# N# T
    43.                  *********************************************( C2 b: I' O8 m5 h( t\" p
    44.                 ***********************************************
      $ R! F# s/ ?$ O
    45.                 ***********************************************% j. s2 l2 Z' u+ j2 ?
    46.               ***************************************************; L+ H1 J3 H1 u' a% i; s
    47.                *************************************************
      & @9 x0 X( h# _( n5 l
    48.                *************************************************' m1 h: ^& J5 [9 T1 a5 `
    49.               ***************************************************\" s9 `9 w- w0 }$ ^2 }7 z6 ~+ m9 s/ z
    50.               ***************************************************
      $ ^8 e/ V' D\" g% j
    51.          *    ***************************************************    *
      8 t  y. L- |3 \; n
    52.        *****  ***************************************************  *****1 M' Q2 ^% P5 p
    53.        ****** *************************************************** ******
      ( y; B\" t4 R$ ]' G
    54.       ******* *************************************************** *******. y) ]$ m& }; _+ f
    55.     ***********************************************************************2 [' I6 r) w4 q* O
    56.     ********* *************************************************** *********# F$ F, r0 W# c
    57.        ****** *************************************************** ******
      , |2 h) ?8 I  _
    58.        *****  ***************************************************  *****
      * C  C( ~1 y& |  b
    59.               ***************************************************, }/ g; \% p+ m1 W0 s: k7 E
    60.               ***************************************************6 G/ R* q# t- @: o# W9 u3 c5 T
    61.               ***************************************************+ X7 @2 l) T9 q, e5 x
    62.               ***************************************************
      4 |* j! S+ E! O8 a
    63.                *************************************************
      8 L! K, I0 h' B6 \+ j9 t3 K( C
    64.                *************************************************
      : X3 {7 ]* ~& u; F( T9 H' r
    65.               ***************************************************
      \" K4 b6 Q6 F  H. i* r
    66.                 ***********************************************# {4 k7 s  E, K: ]4 R0 n
    67.                 ***********************************************  R+ A& Z3 J' c6 h9 E8 |: M
    68.                   *******************************************2 V% s. L8 ~6 L9 I, o% Y( b
    69.                    *****************************************1 o% O! D) p\" H* }2 S* S. ^- E7 }
    70.                  *********************************************
      9 @% N0 w8 w/ g, `0 b
    71.                 **** ****************** ****************** ****
      6 m! y/ d; p1 X3 e! |
    72.                  ***  ****************   ****************  ***
      3 D& A  |8 \4 f/ J. g0 U% U( {
    73.                   *    **************     **************    *
      . w; `3 k$ f8 h4 d  }0 J- n
    74.                          ***********       ***********9 u0 G* T% S. N- ]* o2 ~
    75.                          **  *****           *****  **  j5 X) j# J; W; t\" O5 e
    76.                           *   *                 *   *
      ) n7 u! Z! j7 G, y
    复制代码
    - o" \* N: N5 D8 o2 x; p5 r
    运行时间为:
    $ O  A# G8 X# C$ e0 a5 y' V* u9 n% x  u
            Forcal Elapsed 1.078
    % r' G# p% r  M
    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:03 , Processed in 1.734979 second(s), 51 queries .

    回顶部