QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3069|回复: 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的扩充性能更好。0 Z. [3 y0 X6 f. O* |
    在大量函数调用时,Forcal更具速度优势。
    . z4 X' T5 A+ Z8 J& F& [4 j以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。
    ) y/ }, C$ S% |( j8 ^3 v* J: p1 D: O1 ~1 [/ {6 S0 ?5 c* j; x- }8 W  q3 ?
    例1:Fibonacci递归程序(n取40)" v$ s) G2 p5 R  Q( \% U
    1. SetRealStackMax(1000);
      7 p7 _7 _/ n) T6 R/ S
    2. F(n)= which{
      ( O, S/ f, e, \4 q& j3 h* @. E2 Q# R+ U
    3.         n == 0,
      + O\" U: Z5 O' b6 ?( c6 P4 z\" _* q
    4.                 return(0),
      6 j, Y+ D+ g4 X. u& b* E: _
    5.         n == 1,8 F1 g/ E: k6 v3 D5 Z
    6.                 return(1),
      & y, Q1 s8 b$ U! T- g9 D
    7.         return [F(n - 1) + F(n - 2)]
      \" m+ O$ ~, j& c+ y- D9 @
    8. };
      ( V$ K  K1 ^1 F6 W3 f: g3 t
    9. main(:t,n)=
      2 p) b! r* V3 ^
    10. {
      0 n. \4 s& y\" E2 p& P2 {+ r
    11.         t=sys::clock(),
      0 h: A\" I3 }- [  C
    12.         n=F(40),
      7 o8 C) |4 g! e& G
    13.         t=sys::clock()-t,5 h& z$ @\" G  q  J! h3 I  w9 M8 _
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}
      / g# |) R7 h: ^) ]
    15. };
      5 Z  m# n\" c8 M' v+ p) R8 I
    复制代码
    结果:6 K. W6 ]  p; s9 `5 e$ ^

    ! j# s1 j0 _9 ]. E# ~fibonacci=102334155, fibonacci_Time=41859毫秒=41秒. ?7 d; T9 m: O) W+ E  W7 g. ?

    ! r$ N9 |. H6 @  |4 P+ \5 Z例2:八皇后问题6 s7 i) W2 \, @3 @
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。7 a+ f! W- @! }% K
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。
      2 C! S8 A# n6 R
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。; Q+ _5 \$ k5 l$ h/ @+ Z! F1 z& O
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。
      4 \5 u; d0 U/ U7 ~* o1 N- m2 G, g
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。3 r6 o/ B; O- D( t, H8 P$ }# {
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。# M' Q, V+ K2 x. }
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。\" j+ ]2 w& [# W: f9 o: T2 {( n
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。, s+ P8 O' i4 r3 y0 ^5 U* N
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。
      / u. P4 D4 u) l+ S
    10. //Forcal源程序
      2 `- O: s  b! s8 }
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);- c8 ?\" A9 y9 Q6 H: p5 H9 g
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=$ M; ~\" l2 D. ^4 U8 ]4 M3 H
    13. {
      9 j$ d/ y5 ^, ?* m+ c( x
    14.     which
      ) D2 C  b* E( }0 O. O
    15.     {   row != upperlim,
      0 o6 F; r# n& J. j
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},
        n* @4 G7 Y% r1 Y
    17.             while{ pos,, \2 W. N( ^5 E9 q
    18.                 p = and(pos,-pos),5 O! G, J* L* U9 b
    19.                 pos = pos -p,
      1 k, S\" K' D% @( b
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))) x5 p. J, S4 Z\" |. E8 \& N% y
    21.             }# p$ }) ~0 ]  b: N
    22.         },
      & Z  G1 I+ D+ i5 \; d% a
    23.         sum++
      ) D$ J9 d9 m5 C3 b# P5 I- d
    24.     }$ u8 ]( B; N, O# g
    25. };
      5 S- T1 d2 [/ c( g% j- f3 @$ N
    26. i:main(:tm,n:sum,upperlim)=
      1 \7 @4 g: h\" J, J2 q: t% O2 `* O
    27. {
      & f. S/ h' }6 A0 Z
    28.     n=15,
      - F7 g% B  d; Q' D8 n7 i
    29.     tm=sys::clock(),+ d$ ^$ T* ?\" p) u
    30.     printff("Queens:{1,i}, ",n),
      % N' p; B! ?5 L+ u\" {: T
    31.     upperlim=shl(upperlim,n)-1,; s% g0 W( C\" X( K0 U
    32.     test(0,0,0),, v& M4 I3 m4 _) J3 H2 t; H: ^7 v
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)
        K# y3 N& h; ~# z3 I
    34. };3 [9 s+ ]2 t$ V
    复制代码
    Forcal运行结果:. V; W- X. N$ L9 s1 y1 ]
    9 k; @: w6 j  @( K0 m9 T
        Queens:15, sum:2279184, 59547毫秒.
    * D, \. f1 Y- h* y& u/ U/ S
    8 @+ j1 j: B6 I- U8 f例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右
    & t9 G% E- B9 R% N' c
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =) h! |2 H, Z  ^: f
    2. {% K- Z7 i7 D5 ]5 m0 p
    3.         cr = y - 0.5,+ E& d) e# n6 Z
    4.         ci = x,
      * _  o* K1 D/ b3 j  j\" Y! X1 t* t
    5.         zi = 0.0,
      0 v3 r$ F$ V& X\" n
    6.         zr = 0.0,
      & w, g4 {( A) G\" K
    7.         i = 0,
      , N, T, t& J\" y$ C
    8.         (1).while {
      - z9 Y+ p5 x1 d3 I\" B
    9.                 i ++,6 V; N, _% q: D1 l  e
    10.                 temp = zr * zi,
      ) v7 r# o* `/ l. ~. p+ E* A
    11.                 zr2 = zr * zr,1 f* q9 D: H% z
    12.                 zi2 = zi * zi,- m. B1 C# w\" `: Z* J
    13.                 zr = zr2 - zi2 + cr,8 m( o. J9 p. B
    14.                 zi = temp + temp + ci,2 [8 ~& |  d: v/ V7 }. u+ g6 D
    15.                 if [zi2 + zr2 > 16, return (i)],  \\" Y  P' z; w$ _0 W; @% U: J8 B
    16.                 if [i > 1000, return (0)]
      ; Q+ E3 s% l7 Z7 v
    17.         }8 n, w' L/ o  U2 {
    18.         
      9 S) X! L. M* c, i. c
    19. };3 W5 @+ c6 y6 K' k. g& R3 B
    20. main (:i,x,y,old,now) = {
      . j2 v  K; g! S9 t3 Z9 _
    21.         old=sys::clock(),/ h) O2 [* n/ X+ s\" _2 K
    22.         y = -39,/ b- f6 ^2 e# \2 C  b
    23.         while{  y < 39,
      * z  C4 u) p1 C; _
    24.                 printff("\r\n"),: ~3 X3 }4 ?% m. W: J
    25.                 x = -39,\" {4 d. O/ y6 H0 H; E
    26.                 while{  x < 39,
      4 A3 [) C, C8 U
    27.                         i = mandelbrot(x/40.0, y/40.0),/ U: s+ c9 G1 O1 I' {
    28.                         which{        i==0,
      \" c0 p- w' z3 K\" K' x8 C
    29.                                 printff("*"),
      + z) f) T6 s! W0 ]1 g: a$ }' f% h9 S& P
    30.                                 printff(" ")
      8 N; z  W9 j9 V
    31.                         },
      % m  N1 [! N5 }/ M8 D4 D# u
    32.                         x++0 G1 K( x- a7 N\" ?! |5 l' c
    33.                 },
      ! f& R2 f( C# k( U; {4 D1 \
    34.                 y++  }5 h\" M\" u& l/ U; Z, H; w  }
    35.         },- e\" m0 q& R0 h2 q3 G
    36.         now=sys::clock(),) q* s/ W* X6 ?8 Q. V0 X
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)% n, O9 K6 i1 t! Q0 \+ a5 b: ?5 U
    38. };! h, ~4 {9 v  U, K
    复制代码
    ( m$ o" Q% X. j- q8 N
    运行结果:
    3 x; A' j. x0 l# r  ]4 t  u
    1.                                        *+ [2 ], Y6 F2 z3 n# \8 z# t' j
    2.                                        *
      \" \% M' r8 n5 S
    3.                                        *$ ~1 j% b0 d5 X# A. k( ^) |\" h3 `
    4.                                        *
      5 ]# F, ?2 ^0 I1 r2 J% C7 N; m6 W3 r
    5.                                        *+ G  A, h! g\" F% k. _5 L
    6.                                       ***8 T% _3 c( ]  W* X
    7.                                      *****& ?* Z, V( r; ]. J3 p# x/ I
    8.                                      *****# ]0 g% l5 f5 a
    9.                                       ***- ^( V/ {1 v\" {5 X! |. e
    10.                                        *& J\" \* r5 h# R/ c5 H' z
    11.                                    *********\" X3 E+ W; |% o. j7 o* O
    12.                                  *************
      6 \- }9 D2 Q/ u( o
    13.                                 ***************4 t\" x; q\" }: P$ J# [
    14.                              *********************\" r* S- v; J3 b\" J. r& q% J
    15.                              *********************
      ' W) w7 @# x/ Y1 i! g) u
    16.                               *******************5 ^$ Q. P, j9 h4 [* [
    17.                               *******************! \3 V  b8 t( S3 i
    18.                               *******************' n$ |/ H; S, v9 ]3 E# v0 n7 S
    19.                               *******************0 |$ x- Z. ^9 S; o
    20.                             ***********************; `( g6 E# y; C
    21.                               *******************
      . Y* u\" `+ W+ u7 W- G/ Y) D
    22.                               *******************) A/ a2 U, ~% A' }) J
    23.                              *********************
      $ N; ^, R/ l4 z1 k0 d# r\" A4 a: T! z$ S
    24.                               *******************
      + I. ]2 M8 S; A  C  J% Z0 ~3 h\" s. B1 k
    25.                               *******************
      9 c6 H- U; ]  E1 c, ?
    26.                                *****************
      0 c7 Y/ t! f, V: W, u/ b; c) W
    27.                                 ***************
      8 q) {/ r% H: ]. q
    28.                                  *************
      8 D( w3 |\" h) @- ]( L1 a8 S: k$ S
    29.                                    *********( [4 T( U7 X  X( k* C0 D% l
    30.                                        *
      2 [0 ~4 G  ~/ h% `3 |* y6 @
    31.                                 ***************+ W1 u2 W* g\" U
    32.                             ***********************9 y: G' t' l  `4 L
    33.                          * ************************* *$ P* e* m; r1 J: {1 ^# F
    34.                          *****************************  n+ O1 a, b1 p
    35.                       * ******************************* *
      9 `% P: ~! V' Q2 d
    36.                        *********************************. u! ^! T, O3 F; ~9 a; E$ p
    37.                       ***********************************
      \" J( K  n1 V* v# D
    38.                     ***************************************6 p. n7 F, }4 H5 G# {( j% E1 h8 `8 T
    39.                *** ***************************************** ***
      . B- N' j, W\" s6 ?' U$ \
    40.                *************************************************6 N1 r! H, M. @& \2 W
    41.                 ***********************************************
      , r$ @( ~# J5 W7 q; R1 {- Y
    42.                  *********************************************0 k6 b0 I) x: u8 o( `
    43.                  *********************************************1 a# P+ g& l: [/ Q
    44.                 ***********************************************) x: m9 _' U# a4 \
    45.                 ***********************************************
      # d1 R4 u: |' S; k) V( ]
    46.               ***************************************************
      * b( n5 ^7 {5 C! u& g8 t9 `
    47.                *************************************************. y7 k- }5 `& X, {5 F) R, r
    48.                *************************************************! r% S% p& o7 F* O1 T- o
    49.               ***************************************************1 {0 t) o7 I. V# b- X\" G$ w2 H: D, i  Y
    50.               ***************************************************
      + @1 E% u& c, n
    51.          *    ***************************************************    *
      - N8 J8 m& p. m# B
    52.        *****  ***************************************************  *****+ P6 F  Z5 B% X, _
    53.        ****** *************************************************** ******
      # m+ F) G0 E6 m6 I& E! r
    54.       ******* *************************************************** *******
      / g6 s( c$ [$ K+ X! N. G
    55.     ***********************************************************************& L# P7 a2 u7 u6 A
    56.     ********* *************************************************** *********: v; v7 q1 T% z& J8 x/ C) X
    57.        ****** *************************************************** ******' j3 m& L7 a' g
    58.        *****  ***************************************************  *****2 Z' X+ h6 L1 R4 N0 c* x
    59.               ***************************************************1 ^# C  V. b\" Y; `& U
    60.               ***************************************************& k/ y4 `; H# e8 J& r. J! K
    61.               ***************************************************
      1 j7 L+ R8 |, s8 B! Z
    62.               ***************************************************/ R& T5 \  S: f$ W5 n3 [
    63.                *************************************************
      ( ~; r& \0 V- g! y
    64.                *************************************************
      - ~, f( E2 U! K$ ?2 G
    65.               ***************************************************
      5 z% p/ b# d2 b- s/ j/ g, N3 J2 [$ _! r
    66.                 ***********************************************
      3 _4 w$ i- N* l
    67.                 ***********************************************
      % O. U$ |& v: a\" ?- C4 ]9 S; l
    68.                   *******************************************
      5 u0 p# x4 ?: l/ q; e4 Q! ]
    69.                    *****************************************
      \" i5 n( T$ ~* F; X
    70.                  *********************************************
      . P7 x/ |/ _+ b- |, n0 h2 q3 B\" P
    71.                 **** ****************** ****************** ****
      0 m4 X6 A  W4 G. ]1 [
    72.                  ***  ****************   ****************  ***
      % r- F& M  s8 W8 Q4 [, g( M9 [
    73.                   *    **************     **************    *2 J  i1 a1 A& g4 x3 H  {; b' F. i, g
    74.                          ***********       ***********
      ' ?' ]* O& e5 f( `! r
    75.                          **  *****           *****  **
      6 ^, a! B2 Q6 R& A1 c& v' P# }
    76.                           *   *                 *   ** }2 K1 l1 q! ^+ _
    复制代码
    9 V* _1 ]$ D. ?" B. Y
    运行时间为:
    ( z1 Y* K% ?: ~( o. \$ F/ b
    0 z' I/ v- h" [3 W        Forcal Elapsed 1.0787 j% f% y! R) B* T! h, E: U) v
    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:01 , Processed in 0.617601 second(s), 52 queries .

    回顶部