QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3286|回复: 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的扩充性能更好。
    - T) L4 V% v( X2 m" }: o在大量函数调用时,Forcal更具速度优势。
    3 Y# Y1 c/ |- O! D, ~以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。
    + E& N0 q# n' i; K% r
    4 I. z  k. G; s6 K- K) Z' F例1:Fibonacci递归程序(n取40)2 ]1 z. }; l8 I  b+ f+ T
    1. SetRealStackMax(1000);
      # J& e5 \, a% \8 N& E$ \
    2. F(n)= which{
      8 b8 j* _! c! N0 E3 }+ c
    3.         n == 0,6 m1 ]+ A$ L1 q\" C: r5 A& T9 {! c
    4.                 return(0),1 u2 F$ Z) }9 q\" x% f# p
    5.         n == 1,( ]5 E( i/ X) K% G* m' H* ]
    6.                 return(1),
      1 p# S9 }- H3 Z( Y
    7.         return [F(n - 1) + F(n - 2)]
      . I% r. Z) ]0 s+ n
    8. };
      , t9 @7 h% [+ |0 h
    9. main(:t,n)=
      9 {3 m# `1 ~( y1 _1 |9 g1 N7 v8 Q' t
    10. {
      . C# x3 R5 t4 ?, a+ _
    11.         t=sys::clock(),
      ; r( f+ ]6 x$ D8 p2 T/ _& @& g
    12.         n=F(40),
      ( E3 F( B' W  ]9 D/ p, d7 o/ Y# d\" D
    13.         t=sys::clock()-t,& |, p9 ^: ^# z$ g) l. M( L
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}3 T1 ?% }7 N8 [
    15. };
      : _! z# E9 R8 C+ Y7 R; e, C
    复制代码
    结果:
    : w9 Z: O; X6 Q" ?: j
    , R4 a& j( K4 a2 Rfibonacci=102334155, fibonacci_Time=41859毫秒=41秒
    % V% R2 B. `; n& f$ }0 a5 v" d4 Y, Q. f# B- \8 y
    例2:八皇后问题5 }$ ]  S% R, Q3 z& ^
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。
      5 u2 H- p. E) ?& h/ i  ?1 k8 F( J
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。
      ( R2 W\" _& z7 ?2 _, w( F2 `+ z, v- S
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。* L1 m. g\" s1 K/ `( O2 B+ ?
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。9 S7 ?  h, x+ ?0 a
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。
      8 A) K- j4 l8 O4 q
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。
      + {0 f6 w+ y* e% X2 h
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。* Z, O% J# k1 x: e
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。3 C/ y& U/ \6 V% v7 k2 ?5 v
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。 7 n7 ~: P# H# z8 W2 M\" x
    10. //Forcal源程序
      / s$ |* r5 |8 p1 V
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);
      0 {- K4 e' ^- ]( t
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=9 u* {# V( I/ f3 g. l
    13. {
      1 j9 i$ K) p5 o. v- n
    14.     which
      + ]  X  T: A' p. L4 `% x7 E
    15.     {   row != upperlim,
      7 }3 z7 i2 `4 Y; L' [0 K\" x  _# C
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},
      % B, R) V* T! E! ~( D
    17.             while{ pos,( O8 d+ {5 J/ D! G6 |* \/ C% }1 ]
    18.                 p = and(pos,-pos),. J1 h7 [8 ^% D8 S/ p$ [/ k7 t
    19.                 pos = pos -p,
      ( d6 H7 M- i; t% f- S7 v' g
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))
      9 t9 ]& t) A' E, `9 K. p4 P
    21.             }
      ' S- D, }- J7 Q' L4 V
    22.         },
      9 ^! m7 j) E1 g\" {
    23.         sum++
      3 g6 I  V\" u( Y( r' {. w7 u
    24.     }
      0 N- @+ s% ]* F  Z& u( y
    25. };
      + g1 k+ _0 ?/ {, R
    26. i:main(:tm,n:sum,upperlim)=
        w( N, k. D\" x/ l, o\" ]
    27. {+ k, h1 |' e; A2 U9 ?& M) N4 `
    28.     n=15,* U  s+ y2 y0 W5 c
    29.     tm=sys::clock(),2 d% n/ g( O5 Q& t. l5 N5 V. e' ^
    30.     printff("Queens:{1,i}, ",n),' `8 b7 n1 q7 r  @  [
    31.     upperlim=shl(upperlim,n)-1,1 e\" H2 E0 q! J( y
    32.     test(0,0,0),1 H) b: P, `4 z- M: M# o/ Y
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)5 X5 E6 j$ w( c7 @6 ?2 u2 K6 @$ H
    34. };; R) u+ S' E! n; C\" t  e* y
    复制代码
    Forcal运行结果:
    . r6 b* [0 n) `) `% v: ~
    , _2 t/ F4 s4 R# g6 W    Queens:15, sum:2279184, 59547毫秒.
    ' {6 j/ m$ U" x! [5 ~* a
    8 j0 c! c# }; a. G- }例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右, L2 A, Z) e( Q
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =& k' Z6 n, |- o/ X4 F  {+ u
    2. {; W0 ~2 h8 ]9 \4 y. K  f1 ^0 x
    3.         cr = y - 0.5,
      / o2 a) \8 W! k* `) ~; p
    4.         ci = x,6 @1 Z7 F; ]$ j) [\" x
    5.         zi = 0.0,; \  S- W1 y$ P% f) S. @
    6.         zr = 0.0,
      1 t9 L0 U. A+ A! u9 ?# c2 M4 g) r
    7.         i = 0,
        F5 q2 n1 ^+ w% s0 ]
    8.         (1).while {
      : B( Y8 d7 J/ ~1 ]7 f, M
    9.                 i ++,4 \0 T* }8 k\" `5 h; [) y# [1 w; `' E, ]
    10.                 temp = zr * zi,9 i  _: g# k. z0 T/ {- L
    11.                 zr2 = zr * zr,
      $ |0 L% C  r& P. d) U/ e' M\" X
    12.                 zi2 = zi * zi,
      $ M! s3 L4 m7 K' m7 G9 M
    13.                 zr = zr2 - zi2 + cr,1 l6 v2 L* i# {8 H+ T
    14.                 zi = temp + temp + ci,* ]: r* T7 f/ z% j8 `( @' Y
    15.                 if [zi2 + zr2 > 16, return (i)],! p5 ?% B6 g! v( y: W. i: d
    16.                 if [i > 1000, return (0)]8 N8 }% ]' Z! K\" n. p& O! F
    17.         }  R$ I) ^* N* w\" U
    18.         4 b1 Z5 T9 m6 N0 a) S4 S
    19. };9 L2 d! f. x0 y' M4 [
    20. main (:i,x,y,old,now) = {
      2 Z6 f9 o6 p/ |1 ]
    21.         old=sys::clock(),* o. q9 m: h5 d7 m5 a3 K' t
    22.         y = -39,
      4 b$ L! m0 `. |5 j5 R; E( z  O
    23.         while{  y < 39,
      4 [' O9 s* ~3 ~6 b4 d
    24.                 printff("\r\n"),) u/ ?1 V. t! U7 a
    25.                 x = -39,: X9 K7 i/ q! z# _9 `: `
    26.                 while{  x < 39,, y! w0 K' l- v, u9 j1 ?
    27.                         i = mandelbrot(x/40.0, y/40.0),
        C& N/ {6 l! l. Z- P
    28.                         which{        i==0,' M3 S\" `$ ]) L. r
    29.                                 printff("*"),
      . K8 }/ w/ j, o' h' Q\" e0 z\" K4 O
    30.                                 printff(" ")\" t$ l1 n* a7 z  R
    31.                         },0 x- o6 K$ H\" E0 b+ W: s, H% d
    32.                         x++
      : F* N, t+ D! c) N5 J1 y
    33.                 },+ J' S; F8 v, ]\" U6 {6 M
    34.                 y++
      # v* z! T: V1 ^1 g* x, |: P
    35.         },
      8 E9 n3 A% j6 ]  m/ F
    36.         now=sys::clock(),
      + M. L/ I, d& M, R, O* ~9 h! p
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)
      ; r7 v\" U; [; b+ t5 |
    38. };& ]9 m\" u\" u3 z; @/ K
    复制代码
    : Z9 k; j: M' L. ^- ^% T
    运行结果:0 x" s  ]. x3 T1 M8 }
    1.                                        *$ g0 M. i! R$ j: m- B8 P
    2.                                        *
      6 t\" F7 `5 M. I' o+ r- W
    3.                                        *
      + ], ]+ j+ O\" p
    4.                                        *5 z% {  j8 C& ~& O
    5.                                        *7 m\" R- y( |4 Z/ K7 M\" s
    6.                                       ***
      2 I# S8 A- g3 y8 C& i
    7.                                      *****2 x: |9 h5 Q0 r9 K- L, e. u
    8.                                      *****
      ! ^3 H* {% d4 ]5 D* |
    9.                                       ***
      & R4 ~\" H+ Q4 a
    10.                                        *9 X1 c2 ]3 P+ \4 Z) a
    11.                                    *********
      , Y/ d( Z4 E, o7 s& S\" _
    12.                                  *************4 d/ G( d0 y4 H: I6 k; b; ~
    13.                                 ***************
      ( T\" k3 O, @( f5 J\" \/ y: ^3 m
    14.                              *********************
      / I% Q\" u6 z; A& c7 G( `0 v# }( E
    15.                              *********************  z* n7 i6 Y5 t( E
    16.                               *******************' c3 _5 e- S6 z0 ~8 Q
    17.                               *******************
      2 q\" \! P  a5 Z! O& s! \
    18.                               *******************; b) s6 q2 T) z9 Y
    19.                               *******************& J9 e( m9 ]- E
    20.                             ***********************
      ( ~- h\" b. L, Z. |$ T$ ^
    21.                               *******************
      7 _: b6 _3 f3 s# e. o
    22.                               *******************
      3 C3 U% s& z\" \/ |
    23.                              *********************5 ^  |7 p' O& F
    24.                               *******************
      2 G8 {9 Z4 b0 {# ~) h
    25.                               *******************
      & Q0 a3 q* E\" H* i1 x% G* k: `6 |
    26.                                *****************% Z2 T% D0 Q- a; d7 l7 a
    27.                                 ***************
      . o' i1 h4 [1 W
    28.                                  *************
      1 `6 b9 r% y4 f7 c9 M5 {# t1 R
    29.                                    *********2 A/ b; T: y, T5 Q
    30.                                        *1 ~0 e\" Z5 R9 [) _
    31.                                 ***************
      ; }; n3 F! f- w. N/ o, l& g
    32.                             ***********************
      / W9 @* R% k\" k! ~7 @; ^# x+ A
    33.                          * ************************* *
      8 L0 Q, T' r\" t' r
    34.                          *****************************) P5 G7 G! l8 n; k- X
    35.                       * ******************************* *0 L+ Q\" ~4 ^+ P; ?/ {, B\" y( H7 O
    36.                        *********************************9 M! b9 d  _, Y4 w2 b/ Q2 ^
    37.                       ***********************************
      * t6 t/ o; C& S9 t3 R
    38.                     ***************************************
      1 U1 Z& o$ i, j: f' M
    39.                *** ***************************************** ***% U\" ^* n\" C8 Y. z3 k9 u8 f
    40.                *************************************************2 s+ b- ~( q: {\" q: ?, m3 r
    41.                 ***********************************************
      ; E% h' Q\" r7 D$ v
    42.                  *********************************************
      2 k: o! e  ?/ \
    43.                  *********************************************) l( N9 b! ~8 y% W* L3 @
    44.                 ***********************************************
      6 [( B5 l9 q) Y
    45.                 ***********************************************
      / `5 o8 H$ O' w1 u6 }
    46.               ***************************************************4 i0 N, @3 g! Z. v( O/ ]; w
    47.                *************************************************- Y: n. O. g& @9 H4 |% L! U
    48.                *************************************************1 d' z* ~  `8 h3 X+ ?. H0 R% Y
    49.               ***************************************************; O$ j6 f* l' W0 s! T
    50.               ***************************************************7 C) p! l4 y4 ~
    51.          *    ***************************************************    *
      7 ~- s8 I* y, K4 q
    52.        *****  ***************************************************  *****
      $ u  @$ }$ |3 b$ j$ F4 m7 R* \
    53.        ****** *************************************************** ******
      ! y- P/ L% ]  f6 r( p' ?6 x) i! }
    54.       ******* *************************************************** *******
      2 N& U\" |1 V9 l% i0 O0 s1 }
    55.     ***********************************************************************
      / ]! ^; \2 l- `5 R& Y6 z, C  r
    56.     ********* *************************************************** *********: t- K7 v6 C6 L\" R# P  E7 z
    57.        ****** *************************************************** ******
      ( M' `0 z# a% e3 U5 P& Z
    58.        *****  ***************************************************  *****- b0 _9 C2 `3 ?( o8 \  h0 `3 v
    59.               ***************************************************% ^5 r0 y6 g, S7 ?7 b
    60.               ***************************************************
      - m5 H: U# i/ \; x9 g, g. l! ]
    61.               ***************************************************
      3 A3 [  a3 n. ?  R/ @) l- H
    62.               ***************************************************
      $ r9 }# q8 J/ P. {2 A6 H# x& v0 C0 L
    63.                *************************************************
      , z+ F' ]8 j- q# A! M+ ^; G1 s
    64.                *************************************************
      , ]& u5 ~8 h+ d% Q' r
    65.               ***************************************************6 N% E9 m/ q3 S5 P
    66.                 ***********************************************! L5 Q: v  Y) Z: z2 y+ [\" G' i) \2 Q
    67.                 ***********************************************
      & H. {# ]) B! i7 Y7 V8 T
    68.                   *******************************************8 J3 W0 T2 _& |. l
    69.                    *****************************************
      / e8 I* i1 L$ C' N
    70.                  *********************************************! Z, S\" a9 M. o: q- P
    71.                 **** ****************** ****************** ****
      5 x7 B, N1 [: [; }; c8 ]7 y
    72.                  ***  ****************   ****************  ***
      ; x+ Q# G' X% u6 ]0 r# n
    73.                   *    **************     **************    *# ^6 W0 |& {& v\" |( q
    74.                          ***********       ***********
      4 I\" z6 y$ @( c! A5 W
    75.                          **  *****           *****  **
      ' K% u; j5 A0 b4 ?' K3 ]+ F
    76.                           *   *                 *   *
      ! k( k9 O$ {3 D8 s' P, K8 v2 n# |
    复制代码
    - F3 H) A8 k: g9 S4 H0 p0 ^
    运行时间为:; P# r( B3 r& l% m$ m/ J$ x
      U- \8 d) L" w* i6 Z
            Forcal Elapsed 1.078; r5 H8 v* X" {0 \
    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-8-31 18:20 , Processed in 0.430464 second(s), 55 queries .

    回顶部