QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3221|回复: 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的扩充性能更好。" t2 d; ?5 G5 u1 C2 j
    在大量函数调用时,Forcal更具速度优势。
    : {) ^) B0 M2 f7 d# {1 \以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。
    # {8 b/ A4 e: q5 j: y2 `& N
    & K) E" o9 _- N" f. K! E例1:Fibonacci递归程序(n取40)
    & g9 _6 j. v4 U$ p+ b
    1. SetRealStackMax(1000);3 ~. [. ~  c% v
    2. F(n)= which{
      4 W5 {\" Y, x/ ~! Y: l+ k/ z9 h) p9 K
    3.         n == 0,- P0 K  U\" s+ Y% d' _6 \0 L
    4.                 return(0),\" I$ i0 M2 Y; H' a( Q2 t+ q
    5.         n == 1,
      1 C2 O# a7 L+ l, R# l+ l% ^9 J/ W$ [
    6.                 return(1),! @5 C# h& d\" y3 Q5 W
    7.         return [F(n - 1) + F(n - 2)]
      ' `  h- o4 {% d+ \1 \7 O
    8. };
      , A\" [4 j4 E- \: l' r; q. N- B: q& W\" P: T
    9. main(:t,n)=
      $ M# U8 `5 B7 x6 ?9 J2 i
    10. {
      $ a9 M+ `; _; c+ Y. u, m
    11.         t=sys::clock(),
      / r\" F0 j! n$ W- U0 U/ U7 i
    12.         n=F(40),1 d: d- m& G5 [1 h! O' _
    13.         t=sys::clock()-t,6 f: ?; e. w2 C9 a
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}! p. O( ]  ?! X# y% f* k
    15. }; * B/ V7 R0 [+ I  o\" X
    复制代码
    结果:
    - U& o' `6 w+ e$ V3 U* e' p# j3 M
    8 _4 W& x: p0 }3 N1 ~" bfibonacci=102334155, fibonacci_Time=41859毫秒=41秒* |; [" b; d# w, L0 k2 o

    / _" v! Q* T0 I6 J例2:八皇后问题1 E5 K$ q. Z1 T$ {: Y
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。
      & W# l# }  g# p
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。, U9 F7 x; y  g6 T- S' }
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。% M' U6 D8 N: e/ ]- O: T& O
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。) x( D\" z\" W\" i  C: K$ c- W
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。. K( A\" @  G& w6 v  W+ V  L+ W5 `
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。
      7 Z8 }% D7 i+ {& w
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
      7 W, i  C& F$ Z2 ^3 Q3 P# o
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。4 A4 ]3 _9 W5 A+ L
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。
      7 S0 b1 h4 W) V: n/ X7 {* D
    10. //Forcal源程序
      + v* O' K  Y  ?4 A* [1 C( M
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);$ q1 p( Y5 w, f, C: U  s& o
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=2 w; i& [3 h( a% b' o2 J
    13. {
      - K* v: {5 k9 Y
    14.     which
      $ V6 t4 P$ b- u4 T6 K
    15.     {   row != upperlim,
      0 ^: _# ^% t: }. U$ E) f  k\" A
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},
      3 a  L. Q. s8 l  S8 x
    17.             while{ pos,
      7 W0 d1 G9 t- \. c# I! K
    18.                 p = and(pos,-pos),
      2 E2 s, j6 R! A4 f
    19.                 pos = pos -p,9 N6 t: y' o/ A
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))) _' t\" d' ^& r
    21.             }4 Q. z* F3 u( V\" l' R
    22.         },
      2 p* [6 n: H9 Q9 Y% G. l/ O' Y
    23.         sum++
      4 T* ]/ V3 @9 ^+ j
    24.     }
      ! h0 W  z4 ?7 i5 O
    25. };
      ' e$ X* _1 h/ i* m
    26. i:main(:tm,n:sum,upperlim)=
      9 i+ X' t5 P! D5 H7 @
    27. {/ M5 ^2 A4 g+ y3 S3 S5 D% T7 ^
    28.     n=15,/ ]- l3 x7 v* ?
    29.     tm=sys::clock(),* ?& ^. K: t! l! |. X
    30.     printff("Queens:{1,i}, ",n),* e* _' G2 R4 a\" G6 ]
    31.     upperlim=shl(upperlim,n)-1,
      \" C$ c+ r! {4 {( `  M1 `, c- v
    32.     test(0,0,0),
      ' q\" o1 ~) ^$ Q6 \1 [
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)' [! l8 ^$ H) D; Y
    34. };$ m& s  {/ N; h
    复制代码
    Forcal运行结果:
    # F( z! [) z+ h1 h. n
    # j( N1 c7 N5 M- e. P    Queens:15, sum:2279184, 59547毫秒.
    + ?6 |6 |+ K! L  l, K2 ~& ?; V8 J' q; @# S. I4 |$ n8 ~
    例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右. r7 R% O+ u, L, E3 a
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =6 d2 M* ?( q5 D( H
    2. {' e9 S0 Z\" a. R
    3.         cr = y - 0.5,; s7 S2 v: b* |; b9 M# s
    4.         ci = x,
      & t, y) X- e0 l: T/ [& [0 z0 l
    5.         zi = 0.0,
      . D8 ]: |& _  ~0 h  {
    6.         zr = 0.0,
      . A, ~5 @' a8 @; G, {, ^* T2 h
    7.         i = 0,
      & `+ D8 W$ L6 t' x( s
    8.         (1).while {- y( T  h\" z: u4 s2 V; {6 y
    9.                 i ++,
      ' ?: Q; X6 R  \# T* ~$ _
    10.                 temp = zr * zi,
        }* f% W9 ]/ h\" n
    11.                 zr2 = zr * zr,1 m3 E$ ?. n\" B% a% F
    12.                 zi2 = zi * zi,
      ' f- T7 U4 T, ]
    13.                 zr = zr2 - zi2 + cr,. ~5 j7 ^- u0 ~) N
    14.                 zi = temp + temp + ci,
      + W+ h& ]7 w2 t6 R; @  x; v
    15.                 if [zi2 + zr2 > 16, return (i)],$ G/ H+ r8 p' f
    16.                 if [i > 1000, return (0)]
      , q- ^- [' E3 t' t
    17.         }) D, `1 G& V\" x# \+ Y
    18.         ! ?: ]( E6 O+ Z$ z
    19. };
      # G3 }& `: `2 c4 ]; |
    20. main (:i,x,y,old,now) = {/ A) `0 L/ c0 z5 P
    21.         old=sys::clock(),
      1 R; b. }# M# k
    22.         y = -39,
      1 d* U6 ]8 q, l. Z
    23.         while{  y < 39,/ W+ c7 F( ~6 _( w+ q* m1 ~
    24.                 printff("\r\n"),
      ; C/ {  |* a8 ?8 f. N1 l
    25.                 x = -39,5 y9 ?5 w: \( T6 Z2 f; g# m
    26.                 while{  x < 39,
      3 J) J7 i( G. w
    27.                         i = mandelbrot(x/40.0, y/40.0),+ K* t  R  j( ~& F$ z8 a
    28.                         which{        i==0,\" n6 A! w% {/ ~1 r' U$ `
    29.                                 printff("*"),. x) Q4 y7 p0 s& q- O' u. r. E
    30.                                 printff(" ")4 ^! R7 N9 r; ~& ~- X& J+ `
    31.                         },
      ' |9 x7 r+ J  t3 A) _
    32.                         x++9 o9 j/ n2 G  D. r+ A% K; t
    33.                 },
      ! M6 w\" d6 \4 J3 {, ]( `
    34.                 y++( D0 ~2 X. H; n; G, G  c
    35.         },- {' W) r# K- q# n( S
    36.         now=sys::clock(),2 U9 n- I2 I$ G6 z
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)
      0 K1 g) E. Z\" n8 ~
    38. };
      & X) y3 t* p9 h# X
    复制代码

    2 ]! s# N8 R' W4 O% P运行结果:
    2 d2 r% x+ N7 y. N6 m2 Y
    1.                                        *
        i  }0 A7 {% O* E( W0 g2 c
    2.                                        *  x\" e) w4 g: w5 ^& v
    3.                                        *
      % H  G+ R/ F% w) m
    4.                                        *
      9 j' A7 t. C# u\" n9 P& C
    5.                                        *
      # W) }& Q4 Y/ P, S
    6.                                       ***4 V+ Y) u8 \\" V7 _( T$ A/ H( r
    7.                                      *****
      \" F* Z- c$ d2 ]0 W: |+ j2 y, b& I  U
    8.                                      *****0 u' {3 c3 a7 {! x- x9 E
    9.                                       ***
      - s) c& G9 j% H8 ?+ R- {5 d7 _\" r3 @
    10.                                        *
      0 P5 k, u: Z' @
    11.                                    *********
      % q7 m7 K. i) w6 f0 ^$ p8 a
    12.                                  *************
      : c( y' }4 M, B- _! I
    13.                                 ***************$ |5 j. T2 Z) E+ a- Z' E9 F8 s/ G& J
    14.                              *********************; k5 Z) |# q, D4 h. F. C8 ~7 F
    15.                              *********************, h! x& _* l' t* X3 Z
    16.                               *******************' C) J! u* u% H, w/ ]: H( r- o; K
    17.                               *******************+ x+ ^2 g/ S; e! ?3 L) S$ l
    18.                               *******************4 V5 A8 G# @\" c
    19.                               *******************
      9 ?! m9 H' I- d' G/ q, D
    20.                             ***********************2 w& o# d8 \1 o' Z
    21.                               *******************
      $ Q% N2 m\" N, q- _0 Q6 P
    22.                               *******************/ N. t, p% P) F$ N# i* x
    23.                              *********************5 T# l. |- J1 _( n2 H
    24.                               *******************0 m( s' I2 ?: y$ o4 E
    25.                               *******************2 |+ K! |. L3 \7 n5 l
    26.                                *****************
      & f9 @! m. R( w% n$ ~
    27.                                 ***************
      ! b! l) w' D) _- Y( ~, |
    28.                                  *************
      ! v9 N1 l4 [: Z
    29.                                    *********6 i6 ?7 j. H6 I7 Y5 ~5 M% V
    30.                                        *
      8 n, e7 a7 z1 w& t
    31.                                 ***************
      + B$ q! Z* k. t6 D
    32.                             ***********************
      7 }/ Z* r* ]+ |( s5 v7 u
    33.                          * ************************* *# f3 V1 C: K2 f, L4 k
    34.                          *****************************
      8 d5 ~# `2 R7 g5 ?
    35.                       * ******************************* *
      ) c* z- B  q  N6 Y\" \
    36.                        *********************************
      1 X% q1 c$ y5 F. x+ ]0 x
    37.                       ***********************************( w. X\" s( G+ D$ o
    38.                     ***************************************( Y& a: m2 r$ n; T. @  e
    39.                *** ***************************************** ***, [% U/ _  e! @3 r' R6 }+ M
    40.                *************************************************, C! s3 L2 B4 b: E% y( k
    41.                 ***********************************************8 v. |1 h0 Y: g  \& j
    42.                  *********************************************
      \" y  q( E4 O' b% s* A
    43.                  *********************************************
      ) H1 v: ?* o5 z\" p7 ^\" s
    44.                 ***********************************************
      ) O2 ?# n2 h; ^\" p8 {0 I
    45.                 ***********************************************
      / q6 P! |5 D4 u
    46.               ***************************************************
      - d* Y  q/ N! k' P+ `8 l\" M
    47.                *************************************************
      5 X, y7 `3 S. N- Q
    48.                *************************************************\" k- z2 t3 y6 Y6 ]4 k9 Y7 R/ R) h4 K. K6 Y2 a
    49.               ***************************************************
      5 N$ i# G3 z: d$ w6 {1 ^& |
    50.               ***************************************************! p7 k; f4 n  r6 F
    51.          *    ***************************************************    *
      , X* X/ R- J0 D9 z  U6 Z
    52.        *****  ***************************************************  *****! g7 l: R+ o! m/ k3 n: [) X9 V
    53.        ****** *************************************************** ******7 I4 @% h2 c; N: y2 X$ b
    54.       ******* *************************************************** *******, X6 y( k2 J3 Z+ H9 [
    55.     ***********************************************************************) B6 z\" \  E* E. K4 E8 \( Z
    56.     ********* *************************************************** *********
      : M8 `' V% C* d+ T6 G, \' Z
    57.        ****** *************************************************** ******
      7 ~+ e; |3 n7 V: }3 L' e
    58.        *****  ***************************************************  *****! V4 S7 G' O0 @& o; F. I6 p
    59.               ***************************************************
      ( D$ c$ G9 ?% q, P# |' }
    60.               ***************************************************\" q- x7 q; o3 Z4 O7 k' x3 ^
    61.               ***************************************************# C& i( R/ l! s
    62.               ***************************************************  U8 _- r7 Y6 b\" G
    63.                *************************************************
      0 P8 d& |7 I, @9 G! D
    64.                *************************************************5 }# r: Q+ m5 `\" j' R* g6 J, z% j
    65.               ***************************************************0 ]) p- L9 {( [- {6 g4 D
    66.                 ***********************************************
      $ g\" I; |+ J! o
    67.                 ***********************************************
      , @+ U\" w* R& @; }* G; _) T
    68.                   *******************************************( y1 V5 |$ T( s! B7 Y5 X
    69.                    *****************************************4 b- W; i/ g! y/ K  P
    70.                  *********************************************
      . W% _6 ~* P1 N% z\" f* Z5 I
    71.                 **** ****************** ****************** ****' a' a: ~\" D4 y) G$ p4 H! l; |
    72.                  ***  ****************   ****************  ***2 H& O5 l7 e5 ]( j/ g1 D$ J9 T$ Y
    73.                   *    **************     **************    *2 f0 r6 V& x' {3 z' D. h
    74.                          ***********       ***********2 ?) n1 ^\" U, F  ]
    75.                          **  *****           *****  **
      - c- ^; o; p  V: R' [0 b
    76.                           *   *                 *   *
        V/ U3 p1 @/ p6 Z5 l& H
    复制代码

    ; T/ P/ C, e/ P2 K, E& z运行时间为:9 M9 A3 e7 w2 U( J! l0 o
      j" J2 O! Y" s6 x1 e) ]
            Forcal Elapsed 1.078: Y/ J6 T, E  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-4-24 05:11 , Processed in 0.581931 second(s), 56 queries .

    回顶部