QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3257|回复: 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的扩充性能更好。
    : k  ~( U$ E: s' x; [8 I在大量函数调用时,Forcal更具速度优势。. m" g2 n( t7 J# V  D; W: V: x. h
    以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。
    1 @, S3 e$ d- _2 ?+ }9 o; A% v
    * r  g  j- l- X$ o6 `- R. A- I例1:Fibonacci递归程序(n取40)8 r* w2 {4 m- L. `9 n3 `
    1. SetRealStackMax(1000);
      % [) f! f1 g8 W7 m: }( E
    2. F(n)= which{5 H' m2 V3 ~; E0 m! B& }
    3.         n == 0,# m: `- E3 Q* |3 d# L% a
    4.                 return(0),
      : M1 {+ N8 v! f8 X4 \
    5.         n == 1,
      % R! i2 a' b1 H% x3 d, |
    6.                 return(1),. M% K2 u! h% Y5 B. o& {6 j' m$ V& Q
    7.         return [F(n - 1) + F(n - 2)]
      4 V8 z/ G: |& ?
    8. };
      5 B* D' p: i7 G6 c( b
    9. main(:t,n)=. h. p. u& \  ~' g
    10. {
      9 x7 y2 {0 E! L( y
    11.         t=sys::clock(),& Z\" D6 O* `9 L; g2 z* }0 X8 F2 i
    12.         n=F(40),
      * U: d/ A) S( b4 ~* q9 w
    13.         t=sys::clock()-t,# w6 c+ V1 {$ j- L$ Z( f
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}7 w4 w' p, }# r& B0 T7 ~  D+ [+ X
    15. };
      1 Q/ s8 O  n8 b. R9 ~
    复制代码
    结果:
    6 X9 u( e6 t/ E8 ]3 Z, s8 a" K' t, |6 b" y
    5 a8 E0 q: y$ r* B* g$ afibonacci=102334155, fibonacci_Time=41859毫秒=41秒, A) K9 m; b) u0 U$ i, r" f5 `8 ^$ y
    4 g1 Z. a0 P+ x* C% d0 D
    例2:八皇后问题
    ! L+ G& ]9 ~4 @  F# c$ e+ j
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。' \: n2 C9 J. z
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。5 p# v( J% c. Q* F
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。
      + E6 ]7 s' F, Z0 J! P& w
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。6 `0 V$ G7 b/ r0 k
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。
      % e\" k' X& S* N0 B5 F
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。
      1 |# R% @& B0 B! }/ A
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。! ~6 x: r8 x/ F1 s
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
      ) X4 ?. F! [0 v7 J1 z# E2 R
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。
      4 y8 S* E1 `2 d* I6 ?7 A
    10. //Forcal源程序
      2 V% N9 d8 E! I- }8 R
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);
      1 g3 [3 q  a& w' H- j+ B
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=3 L3 B0 o/ }' [
    13. {\" N0 |) v1 L  L6 o2 c
    14.     which. J& M8 J\" I$ B$ A7 s3 W1 o
    15.     {   row != upperlim,
      ; y5 d! ^: R8 J' Y3 v
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},
      5 _8 ^$ I5 B\" g' a
    17.             while{ pos,
      9 c  G. v: m1 w) d* `7 i, W
    18.                 p = and(pos,-pos),
      0 v* _/ _\" |8 f0 ~! W8 w
    19.                 pos = pos -p,5 U2 A. z$ |' Q, \7 y+ b! D
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))
      # ]6 L; [/ Y. q8 c8 @2 d! F
    21.             }( l1 ]; @& I, a: W' j5 u( L
    22.         },# P+ y: Y0 q& B7 ^5 v: \
    23.         sum++\" @; p! u, N& G2 {. A: y
    24.     }
      ) ?# z' \: B4 O, [4 a
    25. };8 j# u# i5 B8 ^
    26. i:main(:tm,n:sum,upperlim)=* _& I7 ~9 N, A. h. F
    27. {
      4 g6 k* J$ G$ ?) h( f! D
    28.     n=15,
      / R  d: `\" \8 }: f\" _
    29.     tm=sys::clock(),
      % a8 }' t' f5 s
    30.     printff("Queens:{1,i}, ",n),! h5 z/ Q$ C2 P$ c\" y+ t3 F
    31.     upperlim=shl(upperlim,n)-1,
      / l; _2 [  e- G8 S; C7 D! M
    32.     test(0,0,0),7 {5 G\" i  T) A7 J3 s# ^$ [) F
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)6 [- y9 r) @( l9 L7 ?& r/ y
    34. };
      3 g\" H$ T6 R: ?7 T2 u8 e! d$ t
    复制代码
    Forcal运行结果:# z- ^6 C$ i1 r! o9 u7 m: x

    5 a5 b; r  b: ^3 V% L. v+ L" V    Queens:15, sum:2279184, 59547毫秒., k. x5 Q9 s, I8 E( t! s+ o
    8 \, S& x  Q. D0 h. s, B. ?1 K- q0 R
    例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右
    4 g8 N9 b) {5 m7 u) X7 v
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =! r1 s6 Y- J: g& b
    2. {6 X' w) I  F- h4 H7 \1 a
    3.         cr = y - 0.5,7 I0 ^' l- J' T8 V! M3 p
    4.         ci = x,
      * r( W1 e: ~( Z
    5.         zi = 0.0,
      8 ^+ M. i4 P4 Z- G
    6.         zr = 0.0,
      2 W7 f5 v7 w- f. W3 }# D1 L7 R
    7.         i = 0,% n3 Y; z0 ?# b. _7 v
    8.         (1).while {
      ! \6 Z\" O# R+ M
    9.                 i ++,- V\" ~/ {, [( x- S9 o- A/ J/ Y
    10.                 temp = zr * zi,
      7 C# s; e/ @\" C4 p, S/ L; T; Z
    11.                 zr2 = zr * zr,
      * Y$ P2 ?\" w1 Q' g4 @& `9 K
    12.                 zi2 = zi * zi,
      0 h8 Q+ @4 c2 z3 [0 u+ k
    13.                 zr = zr2 - zi2 + cr,4 z. D9 I* d2 w- V9 P  h
    14.                 zi = temp + temp + ci,9 W: d6 O! ~; m; ]) p  `\" ]7 U
    15.                 if [zi2 + zr2 > 16, return (i)],- k4 p) s0 Q$ S: y* A& @
    16.                 if [i > 1000, return (0)]$ f  O/ g0 v7 h3 S# A
    17.         }
      % D\" B; ~; K1 S1 \# |1 V
    18.         # ?& `! i: {  x. P6 Q! `' Z3 d- w
    19. };# B' ?) o' r' e2 W6 u8 T4 E
    20. main (:i,x,y,old,now) = {/ m! c( \# U% g
    21.         old=sys::clock(),: `2 h* w6 t& ~9 ^
    22.         y = -39,
      # E7 c9 `+ R: b& n0 S9 P
    23.         while{  y < 39,
      2 ]% V; |' P( a+ U' y4 [! s( C
    24.                 printff("\r\n"),
      ; P( v* y& Z4 t/ r; I
    25.                 x = -39,) k$ W- }5 X0 B4 k
    26.                 while{  x < 39,2 F) Z. B* L' R
    27.                         i = mandelbrot(x/40.0, y/40.0),\" m1 D3 I! F; m, Z. j1 A
    28.                         which{        i==0,4 S- j3 g# d+ }5 |) b* s6 Y0 X
    29.                                 printff("*"),
      & |+ I\" Y( f% P, \* w& w
    30.                                 printff(" ")
      ' U0 \2 I. d. r2 a/ Q/ r, W
    31.                         },
      . p) ~- Y' t+ d8 ^2 ^
    32.                         x++; ]( j& j9 I( R
    33.                 },) S0 o% X- r7 ~$ j' D5 D* z* r
    34.                 y++$ [/ J8 i- ^$ ~
    35.         },
      ! ~3 x0 ^3 v6 K2 Z# a\" |; B
    36.         now=sys::clock(),
      2 Y8 `3 [- {$ w# r7 n
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)- Y5 u$ o2 T' L7 }: N4 H; H* ^. f  a5 z
    38. };
      5 Z$ u& \5 r5 ]0 j( f) R
    复制代码

    0 E+ Q/ C# r, G! ?' I2 q' d运行结果:
    ; ^5 J0 j: a8 u- a
    1.                                        *
      , z8 }8 \/ k$ s4 V: n
    2.                                        *
      / d9 J\" {; @( Q# J6 A( n7 r9 y
    3.                                        *! y2 q# k+ I  ~2 p% o8 r
    4.                                        *: G$ t1 b6 C! e
    5.                                        ** u+ M# T; D\" J
    6.                                       ***
      9 a8 I; b2 p4 d. I
    7.                                      *****& I2 O, b: C% S6 M+ p1 X, C
    8.                                      *****
      3 y2 r0 U4 p8 z
    9.                                       ***& t1 o4 {  l4 v  S: y5 o- c+ u. \# @
    10.                                        *9 H. M' r: P: U9 H& L( ~
    11.                                    *********
      3 B  U4 F! V( Y5 r( P2 H
    12.                                  *************5 R1 [. ^. O1 `2 R/ T2 T
    13.                                 ***************
      ) l; ^2 E- d% j- Q
    14.                              *********************
      ' ?+ w+ k6 d* m$ k2 C
    15.                              *********************' b$ ?5 ]- W- t4 T
    16.                               *******************
      ( B* r\" Q0 M! M& t; ~: f
    17.                               *******************
      8 k. B  }$ \$ q$ Z9 i, V; @: z1 l
    18.                               *******************
      1 a# O5 {3 Q\" A
    19.                               *******************; ?  `. b. Z  s9 ^/ e
    20.                             ***********************
      & Z5 x6 C; i3 Q! a0 l: T\" d4 {
    21.                               *******************
      1 R% F  N6 L* q; p5 v
    22.                               *******************
      ; P\" Z, {  o# H! k6 h
    23.                              *********************+ _1 X3 N* V% y) s! k, U
    24.                               *******************- \0 B. o) ?) B% t8 t* u
    25.                               *******************& q! R8 x6 p: f0 n
    26.                                *****************
      , j; l5 n5 B8 ?
    27.                                 ***************
      0 Z\" p7 s7 n) T1 _
    28.                                  *************: s5 S  f% k) B) @* F% P8 ^
    29.                                    *********
      / Z& Y# h+ u: U
    30.                                        *
      - O) @1 q5 |/ S: |\" S! h  t, |
    31.                                 ***************+ u, h% p- V$ r4 B
    32.                             ***********************% _. f6 t8 z: K) u9 c9 F
    33.                          * ************************* *
      ( y7 J: {/ G, G1 F  A9 ]6 N7 p
    34.                          *****************************/ {3 Z* f6 Z( t1 _
    35.                       * ******************************* *, r\" p1 l3 u' |/ j( m0 J; ]* k
    36.                        *********************************
      4 _/ G8 d0 D9 s' n8 H& {/ U
    37.                       ***********************************/ W2 T6 q* y  v% J  e
    38.                     ***************************************
      , w& p\" X1 _) G) P
    39.                *** ***************************************** ***& w) I/ b' d% V2 f, ]
    40.                *************************************************) H- Z) v) e3 `- E
    41.                 ***********************************************% c; v5 i* C& O4 g, T% h* z9 p
    42.                  *********************************************7 z. }9 X. t0 j8 x
    43.                  *********************************************
      ! W. h, g\" d\" O  w3 c  Z
    44.                 ***********************************************& |\" J, K% P7 d9 J8 x
    45.                 ***********************************************
      + q\" ]+ E' f2 l, K5 }
    46.               ***************************************************
      ' ?8 P3 f9 q7 P  ]
    47.                *************************************************# \1 e$ k  q, {$ z1 n
    48.                *************************************************
      ! V) G\" q: W9 j4 w- f
    49.               ***************************************************
      9 D+ i( k; u) o# u\" K
    50.               ***************************************************6 q. ?4 m& Z2 J1 r
    51.          *    ***************************************************    *4 n. B* I, }) @7 ~% H
    52.        *****  ***************************************************  ****** V3 X' R# y5 U& l7 _
    53.        ****** *************************************************** ******+ i! G$ }# x! E, Z8 T& y0 z, ^
    54.       ******* *************************************************** *******
      5 A4 H. I# A3 v
    55.     ***********************************************************************  m( s% h, c- m' @6 I2 y
    56.     ********* *************************************************** *********, S& j\" M% S1 u/ d% v. r% r6 F7 d
    57.        ****** *************************************************** ******
      \" f& s: u. }: C+ o
    58.        *****  ***************************************************  *****
      3 L1 o, u! N2 Y& H
    59.               ***************************************************) M\" ?8 D( v) D4 P0 ?
    60.               ***************************************************
      ) ~6 c9 u1 m8 `9 L# \& @
    61.               ***************************************************
      ; O' b5 s$ @- r# w) P
    62.               ***************************************************
      9 G! b6 Z0 j  N! h! Z2 \. P
    63.                *************************************************
      / b# k0 n6 A, V, k0 b5 `
    64.                *************************************************/ A% \3 \4 S( P0 f! F
    65.               ***************************************************
      / N2 t1 N( d7 ?- S! M\" }
    66.                 ***********************************************
      ; f0 l3 t6 r\" ^8 o% i3 O
    67.                 ***********************************************
      3 `* M. y; {7 a) \$ F
    68.                   *******************************************' \+ N/ \6 E, W. }2 y# ?3 D% |) L
    69.                    *****************************************2 N, i, ]4 }+ e- F0 O
    70.                  *********************************************, A. T& f  _/ ]* M7 P5 p
    71.                 **** ****************** ****************** ****
      / B) G% j+ F# Y  E+ P
    72.                  ***  ****************   ****************  ***, Y0 Y4 z- h/ T, f; J\" V2 H
    73.                   *    **************     **************    *
      9 R\" p, D9 {! E0 o* V
    74.                          ***********       ***********
        g; w6 U0 I7 S/ u+ G; M3 |, v\" I
    75.                          **  *****           *****  **6 |% }4 A7 w+ x, ^2 e2 w- Z
    76.                           *   *                 *   *
      & B. E1 W5 ~6 Y. F$ ]& d
    复制代码
    $ b; W  H6 w1 y: P$ |7 d
    运行时间为:
    . V# V' Q/ X5 _
    + B3 a5 _/ J: ]' W        Forcal Elapsed 1.078
    1 C! r8 T; `+ J/ Y. Z6 z$ J
    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-17 06:35 , Processed in 0.461476 second(s), 52 queries .

    回顶部