QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3249|回复: 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的扩充性能更好。/ e# \6 ~# E! ]4 l* _; f0 `/ ~
    在大量函数调用时,Forcal更具速度优势。% z* J2 U, X: q! _
    以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。3 `. `% U0 ~) e+ M/ T8 M- j

    ! ^" g! t, D4 p+ G7 H例1:Fibonacci递归程序(n取40)
    9 a/ O5 n2 ]( ]" i' V
    1. SetRealStackMax(1000);& n# t  R1 V- |- L
    2. F(n)= which{
      * A! R9 d3 C/ [
    3.         n == 0,
      - F\" V3 q/ H; B  b  n
    4.                 return(0),' _1 p\" b) M2 b1 I; v
    5.         n == 1,; [. z2 c9 a& N0 u4 K: _5 ^
    6.                 return(1),
      % H6 o, P( x: T2 X9 P
    7.         return [F(n - 1) + F(n - 2)]
      1 G) q! Y$ h0 |8 P+ t
    8. };
      \" b7 t6 i6 {; A8 `! D; c
    9. main(:t,n)=$ j% z7 T$ _+ u$ k
    10. {
      ; }/ O3 u+ \1 V$ i1 v1 Z& Q$ b
    11.         t=sys::clock(),+ B0 b( t4 y& n! {\" n
    12.         n=F(40),
      ; i/ l- o+ w9 a& ^\" }
    13.         t=sys::clock()-t,\" B' r  {/ h; ^! V3 y
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}+ A3 I* [$ x% M# T: A
    15. };
      \" L9 t: N* ], ^. C& `
    复制代码
    结果:
    * w. D, u- C! n
    : _" q, I* Q! }: x% h* [fibonacci=102334155, fibonacci_Time=41859毫秒=41秒! k$ b$ M# t8 R

    ) Y$ X( S9 b6 a6 U7 x# h例2:八皇后问题
    ) t8 L5 |$ C, B: R) w4 t6 f. A
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。
      ) v3 g- s% Y7 \& ?) X0 n* S0 s
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。+ B. q- t! K/ i+ q, C0 s5 l$ ~
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。2 A/ Y: c; i3 k\" E# Y- k
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。- C- c5 k4 W6 i7 U4 ~+ Y( Q+ \# I
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。  Q1 V# [) x4 [  Y* m9 H$ S
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。2 r3 `( q+ l\" |2 a  c' [+ b. G
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。3 u4 y- J3 m6 F7 Q4 H! ~
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。: a, ~; l* F! E( ^  j1 y
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。
      # W0 @6 P0 j( O\" N6 C/ d
    10. //Forcal源程序1 L3 m; V( B0 P9 e
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);% |6 n2 d1 L! F
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=
      7 `1 G, ?8 C% w, r$ C, P0 _
    13. {
      / G) I$ y7 h9 K1 D
    14.     which
      8 F: W. |& }5 R1 T! X) Y
    15.     {   row != upperlim,% m3 y8 R, g1 v
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},
      2 X  Y- M9 l! P4 j3 q7 _
    17.             while{ pos,
      ! R* g( E- b- z
    18.                 p = and(pos,-pos),
      1 y  E- H0 ^3 Y9 B$ Q
    19.                 pos = pos -p,
      ) x' h- c6 ]. n3 n5 T# s\" r* S
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))
      & }  m5 C0 D( m- r1 a' ?
    21.             }
      / G0 m+ m  w1 k5 l
    22.         },. k0 M  m. e! L5 J
    23.         sum++
      ( r7 W' }; L. y$ B$ A  i$ R
    24.     }0 \: q7 |\" H# t1 k
    25. };
      ( o7 r4 M% F( h# L0 N' @
    26. i:main(:tm,n:sum,upperlim)=
      4 h8 t5 x- p9 U, ?0 ?% L$ T
    27. {# i) t9 i# ]# u9 T4 u& a# i
    28.     n=15,0 o6 F$ L4 n. k$ G
    29.     tm=sys::clock(),
      ; D5 @; l* S( l5 R
    30.     printff("Queens:{1,i}, ",n),
      ) ?  G* H, a0 @. {/ {: E) I3 y% H' D
    31.     upperlim=shl(upperlim,n)-1,
      $ _\" s* P\" i! z& J+ q' z  D/ j$ b+ D
    32.     test(0,0,0),
      ! s) u3 f\" Q: w' o% L: A
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)* o( n2 X4 \- T* D% m\" ?
    34. };
      % R2 K& Q& ~4 O# T$ G
    复制代码
    Forcal运行结果:
    9 z& a! O6 A1 h" Z: N4 a0 Q3 M0 U* o1 r* J+ j" e
        Queens:15, sum:2279184, 59547毫秒.
    8 ?7 v. _4 z+ f- z/ E- f5 S3 U) i; \2 t: U" u  v
    例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右3 |! A1 B$ }* P3 R. v; {  V$ u
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =
      0 H& H  Q' A' u$ l& u. O0 U
    2. {\" U7 m% q8 R\" m; L\" N
    3.         cr = y - 0.5,
      + U: H4 T$ H. n1 @
    4.         ci = x,\" K- B* ?0 q! V: b* s
    5.         zi = 0.0,
      0 P- A2 G! M9 ~9 T5 S; c
    6.         zr = 0.0,
      : a4 U4 N% R9 Q7 {
    7.         i = 0,* v0 e& _; b: x8 P: n
    8.         (1).while {
      9 z! H) g4 _# c5 c0 o\" K( A/ A
    9.                 i ++,
      $ g& A  @$ d! c
    10.                 temp = zr * zi,
      / D  n8 Y3 v) M' x4 n( n' g8 l0 H
    11.                 zr2 = zr * zr,6 l) U8 L9 G( j$ w' p8 c, h4 g
    12.                 zi2 = zi * zi,
      4 N! F; n8 C\" r
    13.                 zr = zr2 - zi2 + cr,8 G* |5 @! ^, y4 @1 j
    14.                 zi = temp + temp + ci,
      7 a8 x! \\" ~0 c) s8 a
    15.                 if [zi2 + zr2 > 16, return (i)],2 J- m. r, ?' C+ T
    16.                 if [i > 1000, return (0)]
      6 T! C, B- u( l: S  c6 Y  {
    17.         }
      - r9 T, a0 h$ u- M; }$ i
    18.         
      2 z3 y2 Q4 H8 W
    19. };
      ! K; s% b, @9 o\" n+ n
    20. main (:i,x,y,old,now) = {
        m) a8 W: M! p2 \: I- [
    21.         old=sys::clock(),
      5 A/ }# J& T  k3 l4 h: ]! ?
    22.         y = -39,
      # R+ N7 u  O. u$ `+ a  c- a, s
    23.         while{  y < 39,
      0 M, b0 G- g+ J! G- G2 c: I0 T8 Z) b
    24.                 printff("\r\n"),% p; c\" i\" m0 o( U
    25.                 x = -39,; S% s\" \' R6 D+ }0 ?2 D
    26.                 while{  x < 39,: B; l/ r' v6 a
    27.                         i = mandelbrot(x/40.0, y/40.0),* n) x6 s. m! t8 V
    28.                         which{        i==0,: x! F* X, X# p$ M. S/ Y; O+ }
    29.                                 printff("*"),+ B9 Y% h* R' f* O& E/ j
    30.                                 printff(" ")
      - N% @+ J+ Z% N7 S
    31.                         },
      . T1 O6 `5 r) q  E: y! p( ]) r\" }$ w( O; H
    32.                         x++2 u- M: l, r$ S6 W( V. X
    33.                 },
      ; p- i\" ^, e4 S- w& U0 J
    34.                 y++
      3 l+ z* [/ z$ q
    35.         },
      3 ]7 G5 t+ z+ u) O) y- `
    36.         now=sys::clock(),
      5 }7 C1 e/ K! C+ a$ t- V6 o
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)
      0 g- t: ]% t1 i5 w
    38. };& p6 C\" W/ S7 z% W7 H) g/ U
    复制代码
    - u" b. R7 _# {
    运行结果:" `- k6 {- Y! o# M  `6 v" _5 }3 G
    1.                                        *
      ( `- H$ ]+ v2 s: l  M) T
    2.                                        ** Q1 p- g2 P, _6 h& w0 c; m8 c3 J
    3.                                        *; s' ~/ x2 [; `' q8 ~) T7 O
    4.                                        *
      6 O$ u! [, k9 @
    5.                                        *
      : o( U! S; _4 a3 T
    6.                                       ***
        `3 ^% V. q( U\" u2 W' Z- ]\" ^
    7.                                      *****
      ! s/ i! s  @+ ?2 W$ d; ^- z
    8.                                      *****) U. W\" z% S4 _: y3 A0 |+ A: P
    9.                                       ***3 k' H; U) \. w0 v9 M! I
    10.                                        *
      : ]) d* X6 M! C$ L5 Q6 N0 Z8 y' p5 E
    11.                                    *********
      * I+ m! O0 v: c% P) @6 Q$ q
    12.                                  *************
      2 U7 {- E' `9 z  U) x6 Y9 K
    13.                                 ***************\" U  J$ ]0 c9 q8 T1 _: C0 k8 a) o& [
    14.                              *********************! F/ T4 _) _/ R& q
    15.                              *********************: I/ V7 @+ s1 G
    16.                               *******************: i1 _! c3 V1 x
    17.                               *******************3 @- [' K2 g, p5 L
    18.                               *******************3 z% G6 h' b2 X4 ^) W\" j& v
    19.                               *******************
      # l8 e4 ]# m5 c  }# ]# V% D
    20.                             ***********************6 g\" P8 Y) i# O$ y3 \5 y
    21.                               *******************$ A& G8 m3 V* @, o1 N
    22.                               *******************
      2 @  G2 U# R9 t1 d5 M0 L
    23.                              *********************5 o* h7 j# I3 ]' `- ?( U! Z
    24.                               *******************\" d9 L. j- l* ?
    25.                               *******************
        U- W! [& Y% n9 E
    26.                                *****************
      . F( h, n* |& c% [  \- s
    27.                                 ***************- H' H6 s1 Y' W1 w
    28.                                  *************
      3 c' P7 B' B\" ]  ]7 s
    29.                                    *********
      3 A5 ^2 d- [8 {0 N8 X  F4 z
    30.                                        *
      5 i, n' i7 d+ I2 Y. y9 q
    31.                                 ***************8 b7 i: f. G0 E# b
    32.                             ***********************
      4 \/ \/ ?6 t' _\" G6 l; T
    33.                          * ************************* *
      1 l* u/ M7 l  M3 B
    34.                          *****************************
      8 A8 K! D/ e5 q3 k$ w7 Y6 @
    35.                       * ******************************* *\" o1 C\" Z: p9 j$ Y4 O4 j
    36.                        *********************************
      ( u5 l9 V9 K0 v3 m, d
    37.                       ***********************************
      0 v# C' p; `- H! C( G! W
    38.                     ***************************************
      . t$ a8 H7 V4 h/ F, r% P
    39.                *** ***************************************** ***# f  R) P$ q\" E) e* G
    40.                *************************************************: s7 o. b. }  {# |0 U
    41.                 ***********************************************+ _8 K; |$ j- ~/ r( b+ k; v\" h
    42.                  *********************************************5 @! P, b6 u) A* l2 b0 T
    43.                  *********************************************
      ' Y: Z\" v, r3 s2 e( c
    44.                 ***********************************************
      & U1 z: M, ~/ x- Q' G2 a
    45.                 ***********************************************# Q- C1 q0 y, v# Z1 l; k* g0 F
    46.               ***************************************************2 B' M7 }; S$ X- F: ]/ O3 d0 A
    47.                *************************************************
      4 [\" ]7 e+ N- e3 F. p3 S! V1 p# t( A/ i
    48.                *************************************************3 {5 ?( `; P0 z( R2 f
    49.               ***************************************************7 P+ M: R' m% U$ i: P
    50.               ***************************************************! B* U+ w/ N7 E8 z! n: H: c8 a
    51.          *    ***************************************************    *
      6 n; S1 L% z, j* B& ^
    52.        *****  ***************************************************  *****
      2 M: E5 t8 o7 N4 D2 t\" U8 I: ]3 ~
    53.        ****** *************************************************** ******! i. N6 f% E* p# a  y1 P* h* Z
    54.       ******* *************************************************** *******9 f: F7 ?+ \; f* m# n1 N4 p
    55.     ***********************************************************************
      2 [: X! S( W) o\" Z, d5 E
    56.     ********* *************************************************** *********( }& i. G6 R) F) l
    57.        ****** *************************************************** ******# _2 N' K7 t5 c2 t
    58.        *****  ***************************************************  *****
      1 O) u9 {+ X4 o7 c
    59.               ***************************************************4 a5 V. t2 V+ Y7 s2 `& a. m
    60.               ***************************************************
      : v( B\" a\" Z- p+ ?  g
    61.               ***************************************************
      / E5 w- ?/ k# x\" k* R. D( L
    62.               ***************************************************- b9 \' Z$ t! L! u5 k. u/ N+ d1 ^
    63.                *************************************************
      : N+ {# y/ e9 W
    64.                *************************************************
      7 k+ F3 L5 J9 _# F3 v% a3 c
    65.               ***************************************************
      7 i! ^6 e* R7 [7 Q7 ?) j
    66.                 ***********************************************
      # c3 v7 X\" K4 w# [
    67.                 ***********************************************
      ! j( E& Y; w( r. G3 |/ o
    68.                   *******************************************9 s\" q9 F6 E$ A: w9 O
    69.                    *****************************************2 A- A4 ~9 e& e: b8 u! c) x7 W5 t( K, q
    70.                  *********************************************\" Q5 O9 b0 A! O
    71.                 **** ****************** ****************** ****! X# k, V9 x! Q- K
    72.                  ***  ****************   ****************  ***
      9 m) d$ N$ p; g4 q, z
    73.                   *    **************     **************    *; c+ Z' h( M) X0 D6 c* ?
    74.                          ***********       ***********
      7 [& r! G' A% l+ ~
    75.                          **  *****           *****  **
      \" h# j  l' @, s' n% W\" N
    76.                           *   *                 *   *! E+ d( Q$ g, W: n
    复制代码
    ( O' O) e/ x9 F( x, p
    运行时间为:! S& B+ Y$ W. s. V6 u

    5 u* \8 j% ^5 R+ y, X% G        Forcal Elapsed 1.078' Q- P, H; W4 [4 |
    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-13 07:14 , Processed in 0.406135 second(s), 52 queries .

    回顶部