QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3251|回复: 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的扩充性能更好。' O9 m0 c& S2 ?* S) O
    在大量函数调用时,Forcal更具速度优势。% D6 `  k: }$ W" F( |
    以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。, o, d9 v: F0 [$ y9 v4 L: j
    8 h1 A. l; T  `5 m: Q
    例1:Fibonacci递归程序(n取40)
    : T2 i8 v* u0 }
    1. SetRealStackMax(1000);
      , K( {/ Q& Y8 f9 ?. `  F% v\" T; s
    2. F(n)= which{
      8 r! g/ W% M2 K* k' s
    3.         n == 0,( g0 Q* A+ x% ]4 ]- z/ f
    4.                 return(0),
      1 I) x$ x; ~. @% B6 A6 j
    5.         n == 1,
      ; y' K7 G( o1 c# A8 N
    6.                 return(1),: `' r4 u. H9 N8 Z5 `* k
    7.         return [F(n - 1) + F(n - 2)]9 D/ Q) p$ g; [\" t* Y* g' V\" b
    8. };. W1 W% B8 H: l
    9. main(:t,n)=6 z& N; D* `  \
    10. {5 f. S& }+ F2 o, Z
    11.         t=sys::clock(),, v2 |; p- ^5 v: t: I. j
    12.         n=F(40),
      7 u8 `+ w\" d9 _0 U
    13.         t=sys::clock()-t,* i/ D& H( }; u2 L7 J( x; |
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}
      * g1 n% h' }! q! g& ^# O
    15. }; ( n. M; k5 w1 c* j2 P/ d4 `9 c8 r
    复制代码
    结果:( [8 K' [$ j9 e0 k" M2 B
    ; L/ t( x" ]1 o3 x
    fibonacci=102334155, fibonacci_Time=41859毫秒=41秒
    9 b) \- c- \; j& T7 }# V+ I0 r% t
    & A* p9 t, D7 B- n3 u' j例2:八皇后问题5 v7 E3 g. J# C7 d& ~' {+ Y
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。
      , |/ k  D3 K1 b  z
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。
      / A2 r# C8 p! P3 Q\" K9 g
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。6 n* x5 N2 `& {
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。
      8 X\" y\" p\" n4 M
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。
      $ Y5 B7 r) [9 L1 ]' M( }
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。
      % ]! G# Z( a5 m8 t/ U3 f% c
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
      * f! o6 V7 \- ~- h
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
      . k7 K6 O7 d8 C3 t) k5 y
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。 4 @! z5 t: ?7 V/ C1 g3 F
    10. //Forcal源程序  ?% @. U4 d7 l# t3 k
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);, `! h: ^2 X% d$ ^. l
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=7 F. r# G\" F1 ]% G1 I
    13. {
      , X/ Q; W# l, Z3 S, E; E( |
    14.     which
      * L3 z& _- {: ^% ?
    15.     {   row != upperlim,8 Y) t+ x( e9 N6 W2 g6 N$ ~
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},5 }7 j\" s  P& }\" V
    17.             while{ pos,
      5 `4 A\" q+ y- }
    18.                 p = and(pos,-pos),7 T- F% U! d\" V7 T# y7 n3 I
    19.                 pos = pos -p,
      ! G; M  H  y- R! }. e
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))
      6 m* g\" o( |3 }% b9 B$ @( ?% v/ V
    21.             }
      ' p1 r0 U/ n6 Q\" a* `
    22.         },5 w; n8 G0 b. B, x5 f2 s
    23.         sum++
      1 P' s5 Z* x  F6 b
    24.     }
      1 m; f) e  w0 {( A
    25. };. K7 B\" d6 E  r& F
    26. i:main(:tm,n:sum,upperlim)=
      4 {, _; p2 A$ z) v+ S! Z) ~
    27. {
      1 R+ p) y* a0 q; k' l4 P
    28.     n=15,
      ! x0 I7 s. r. @+ }+ T9 g1 z
    29.     tm=sys::clock(),* u+ U# K- T4 B) r  r0 O' `
    30.     printff("Queens:{1,i}, ",n),# ~( w8 l' S: R7 o# |% Z/ a* L
    31.     upperlim=shl(upperlim,n)-1,+ D$ @( O. ?) \' n  b
    32.     test(0,0,0),
      ' R  T3 M$ O% |& ]8 y: p7 j
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)
      . ?# J, b* Q4 j' P
    34. };
      9 u' \) J( L/ k* w. V
    复制代码
    Forcal运行结果:& f" ]: c0 j, V3 {
      ~, _9 l9 f) Q! Z/ w$ J
        Queens:15, sum:2279184, 59547毫秒.
    5 m2 e) F/ @7 [: C6 W9 Z; R0 ?$ l  Z4 p( Z  w+ {
    例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右+ ?7 I& a; z' r
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =) K6 {' m  Z- }7 I& V, ?- n
    2. {$ F0 @  r* t, y* y. R% T, r
    3.         cr = y - 0.5,
      ! Z; w( ^3 o1 d- ?) V( f% n
    4.         ci = x,8 e2 k2 B) c/ U4 t! l. q& N
    5.         zi = 0.0,
      5 x( t3 _\" f. n6 I% G% D) y- b
    6.         zr = 0.0,& F& \8 |( r( Y' y: H. g- w
    7.         i = 0,
      2 m5 j9 Q3 o6 b; p
    8.         (1).while {
      5 E) m8 Z3 L' g( ^\" H# J7 H
    9.                 i ++,& |+ C# Z5 k9 d1 b- H7 D& |
    10.                 temp = zr * zi,
      ! h  D# g# y. O6 _
    11.                 zr2 = zr * zr,0 _& t1 O9 @: Z- p$ H8 A
    12.                 zi2 = zi * zi,0 n3 u3 g. U7 K& |+ X' R7 t
    13.                 zr = zr2 - zi2 + cr,; x) g* L  n0 [- X- Z
    14.                 zi = temp + temp + ci,
      3 B4 T+ O! m; X* _# F3 W  u
    15.                 if [zi2 + zr2 > 16, return (i)],
      & f\" k: d3 L4 u, {/ U- B
    16.                 if [i > 1000, return (0)]5 J1 B1 g: c7 L, s
    17.         }4 o* f8 ?8 r1 t# \+ K4 [0 G& Y
    18.         
      5 Y( h\" D) y! [
    19. };
      # L3 f6 f* c9 u+ ]) s5 D: P
    20. main (:i,x,y,old,now) = {
      ' ]& U: r: t0 z1 I2 g2 {
    21.         old=sys::clock(),\" i  n; I- D% h: H$ v
    22.         y = -39,$ K% ~! p7 z) B; A/ i7 L7 G
    23.         while{  y < 39,% Y; I- [5 R% W! o- ]
    24.                 printff("\r\n"),' V4 r( G, z  K- u! ^6 b5 u; C4 l
    25.                 x = -39,, }, v4 u2 a* M. R/ B
    26.                 while{  x < 39,
      ( X$ [- c* q\" `0 n6 A& G
    27.                         i = mandelbrot(x/40.0, y/40.0),
      ( |0 \- j  T4 ?
    28.                         which{        i==0,3 F% `( q/ l! _+ ]3 }$ h  c
    29.                                 printff("*"),
      / r* u% O: @% I) C& z# [8 k
    30.                                 printff(" ")7 p7 g7 t6 O; y5 p3 F) A\" Z
    31.                         },
      3 t; _8 {* S3 o) L' u7 k( l
    32.                         x++: I: C! D* h& x; Z
    33.                 },
      $ O5 A% V! C/ ~9 V  `0 |' ?
    34.                 y++
      % p8 N1 j& w7 R0 Q5 F, N( |
    35.         },
      * D7 l# u3 {2 R& \
    36.         now=sys::clock(),
      7 H0 I% ?. q0 E
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)
      ) M' V% y6 t7 U4 h! G' f
    38. };6 E: @\" X5 C& O6 z- E
    复制代码
    ; E( ?1 p, L. j; i
    运行结果:
    3 T8 O4 X- L) H# g# X# U! J
    1.                                        *$ S8 b3 Z4 H6 E# N) E2 W9 R
    2.                                        *
      % U( q4 {9 Q7 l
    3.                                        *
      , W# W4 p- m3 Q( @! Q6 q; F\" F. y
    4.                                        *8 K; P+ R) m+ w$ R& q( ^  n. w
    5.                                        *. n9 n# [0 L' h5 I( l
    6.                                       ***+ i6 ^- C4 A; e8 y* U
    7.                                      *****+ Z( k* Q+ A0 h9 }5 P0 x8 I% X) F
    8.                                      *****. x+ S+ ]3 x0 K: c2 ]: H
    9.                                       ***' T8 v3 ]( X, u- o$ t
    10.                                        *$ r% X! A# A$ x+ v4 i) Z
    11.                                    *********
      ; U1 e+ V6 v! K; r\" d\" K! L
    12.                                  *************
      * O4 ~5 R0 c0 e; g0 q
    13.                                 ***************+ |9 P+ l/ @4 K8 w
    14.                              *********************0 a5 F$ z: A6 e. J4 A1 q3 i3 D/ ~
    15.                              *********************( P8 U1 y8 X/ i: e8 ~5 _: m
    16.                               *******************
      ( \5 r\" X0 G1 Z* {8 t/ }
    17.                               *******************\" T. N# v+ I! e$ _- j
    18.                               *******************
      * D1 h# |6 \0 S
    19.                               *******************& U. r7 I6 Z& y2 D  Y2 T1 n
    20.                             ***********************( p2 r- o0 \! P5 v( t
    21.                               *******************' s; A) n; L5 U; N
    22.                               *******************
      ) o2 Q6 {0 E: V- O8 i; c
    23.                              *********************$ L\" ]: |% c( ~
    24.                               *******************, j( Z. t8 j5 w0 ]% N4 G0 E6 D
    25.                               *******************& @  |- b\" h% Q: P8 _4 T* }
    26.                                *****************8 X% X\" a6 j; K% f3 e
    27.                                 ***************
        F& r( D# M% B. k! a
    28.                                  *************# @' x- a' Q4 o- K\" ]% _, q
    29.                                    *********1 k: b+ Q. e7 W( z* H* k3 h+ ^- W
    30.                                        *9 A: w2 _$ R1 T- Y! U9 o0 B
    31.                                 ***************
      ; J5 R/ Y7 j9 R
    32.                             ***********************
      . B5 ~# s: g7 h# L% o  \$ @
    33.                          * ************************* */ I# H, l$ c  w; a# L; ]  O  O# \
    34.                          *****************************1 |5 q; b4 X3 I/ f% Z: c
    35.                       * ******************************* *
      7 S  E$ T, o# o
    36.                        *********************************! V; f5 R0 Z( r* h/ _
    37.                       ***********************************
      3 R  v) l1 l1 t* P1 v9 ?, _, I' I
    38.                     ***************************************8 Z8 W/ H) w8 R$ n( k( h
    39.                *** ***************************************** ***' O9 s* s* }  a% _) C: n0 J: u
    40.                *************************************************: ?2 S$ Z& ^' r/ W\" A% N
    41.                 ***********************************************
      5 \: B* \& i+ I* _: a
    42.                  *********************************************5 F5 ~- q) F* @1 G& K
    43.                  *********************************************
      0 ]5 E! d' {\" x7 }; s% R9 U8 w
    44.                 ***********************************************
      , @4 U0 Q1 D* N$ f+ J+ `4 A
    45.                 ***********************************************: k/ X0 u% n' }1 a
    46.               ***************************************************- S  \\" T, O. ^: h- T
    47.                *************************************************  K! D7 H. l3 k& _
    48.                *************************************************
      5 G  e8 v# k) k- E
    49.               ***************************************************
      ( {* y\" ^7 u1 J5 ^; @
    50.               ***************************************************
      7 E& R4 h1 n/ t) L
    51.          *    ***************************************************    *
      : G% p( V2 L2 D) \
    52.        *****  ***************************************************  *****
      ! {$ ]\" {1 t, x( `) K6 {) L8 \
    53.        ****** *************************************************** ******1 s. [0 H0 B3 C6 u7 T
    54.       ******* *************************************************** *******
      9 Y# X2 c1 M6 w1 Z
    55.     ***********************************************************************
      : a' i5 [/ w9 _\" U$ X7 ^0 j: Z
    56.     ********* *************************************************** *********
      * ?5 ]& |7 L6 S4 j- i6 Q3 E6 J! y' z
    57.        ****** *************************************************** ******9 n8 Y- O9 _$ k$ a7 a& G# B  n% F; w
    58.        *****  ***************************************************  *****
      : M8 x% H4 H- Y4 ~
    59.               ***************************************************
      : C* L3 \& ?& p$ ]\" @
    60.               ***************************************************7 S  G+ E# Y' ?
    61.               ***************************************************, v7 H: F2 N. V  M5 e
    62.               ***************************************************
      + D6 \3 j  t/ h! b9 C: G4 L
    63.                *************************************************: x/ `2 h( \$ B  b0 t
    64.                *************************************************
      # E/ X0 ?' y$ r' U$ T\" K
    65.               ***************************************************! z+ O7 H\" `$ r6 _
    66.                 ***********************************************& ~+ B9 s  m& l7 C+ k1 X
    67.                 ***********************************************. l5 `\" S\" S3 c4 E, G9 t! F
    68.                   *******************************************% {$ [2 U  v9 I) I8 i- h4 T/ _: ]
    69.                    *****************************************
      5 ?) {, b# O( l& D$ S
    70.                  *********************************************
      9 z: j4 B$ @0 i
    71.                 **** ****************** ****************** ****5 k) F0 {( `$ Y) b0 [
    72.                  ***  ****************   ****************  **** A7 {7 o9 a9 \4 _
    73.                   *    **************     **************    *$ c5 ^$ K, U; k2 s  x) |
    74.                          ***********       ************ x9 ?* B* i4 v
    75.                          **  *****           *****  **9 N: O4 h9 A3 I  |9 \8 [) c5 ^* H; B* ]
    76.                           *   *                 *   *$ R* B. Z8 I' ]' F3 l' W* K
    复制代码

    - Q  _$ D8 W' Y3 `9 K; p运行时间为:
    $ o, q1 q' C2 j3 C( l( _* t# a( a- D' g& R) x% s5 [) n, f
            Forcal Elapsed 1.078
    # P5 M* P' G$ Z( q/ H& R7 b$ i/ |+ L
    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-16 00:42 , Processed in 0.375305 second(s), 51 queries .

    回顶部