QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3247|回复: 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的扩充性能更好。
    ; d) B% y9 G* Q' V( _# K在大量函数调用时,Forcal更具速度优势。% O; k. J* K4 K) ?& \9 |, K
    以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。
    7 [( e- [7 M" H& r! q( f6 G6 Z! A. o) a$ |% E$ E$ g& p
    例1:Fibonacci递归程序(n取40)6 \5 a6 C4 G3 l" C# q: }
    1. SetRealStackMax(1000);9 Z  k0 [3 [& e3 E' ~
    2. F(n)= which{
      ! l! q2 }: r\" W, U& @
    3.         n == 0,
      & Y/ m5 @! `' _- v) V5 i
    4.                 return(0),6 G2 ]* a5 V5 ^( W$ _/ [4 s
    5.         n == 1,
        _3 T\" g  U% O\" [! M, A
    6.                 return(1),/ w- d% t* Q, J; ]
    7.         return [F(n - 1) + F(n - 2)]
      ) m4 Z$ ]4 U  ~: f; o
    8. };
      $ j& r' ~5 M  y
    9. main(:t,n)=
      6 \6 y+ j) ]) @5 p
    10. {5 [: j) @' d( Q7 |, _. e' N$ ?
    11.         t=sys::clock(),5 D) f7 v: n) ?! }
    12.         n=F(40),
      7 T3 H3 n5 W3 @0 H) c' u9 C; d
    13.         t=sys::clock()-t,
      . N0 y$ w, o) L- S1 E1 W9 e
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}# t! _* c2 }# ~' P, U+ [, e  J2 r
    15. };
      8 |! B# {& \, `, @\" N
    复制代码
    结果:
    ; V% r2 G7 ^% G! \) ?8 ]
    8 d6 {! y- @$ x4 \; z- D% m* Z; Gfibonacci=102334155, fibonacci_Time=41859毫秒=41秒
    8 l8 g* r' ?0 H: D$ m. g) g* v8 f* s- ]& z. f* L5 o( S* v/ |
    例2:八皇后问题# `0 Y) a4 q0 m2 r
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。9 g% j+ h6 H% F: E* d
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。( e% @3 \9 Y; l4 F
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。
      * B+ [' n\" K- K
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。
      2 b2 l7 ]8 w, s* K
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。
      ' e# X) H+ s% m0 Y$ I' S
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。- i# [( E' f  a  I8 v/ D0 B& R
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
      9 {1 h* w8 h2 n3 b/ G- J2 I
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。) V7 o% e; q* E) k/ [* G
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。 6 \) y6 l, @* E+ p% Z$ l/ b
    10. //Forcal源程序+ K# }2 d8 r, e8 o
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);5 N8 ]0 Y* Q' H8 h' `, s
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=# J8 m' L/ Y( [- @' S
    13. {
      7 B( }& G3 n0 i8 r. Q\" B8 e# m  |
    14.     which0 E  f/ K. h% `6 [
    15.     {   row != upperlim,\" c8 b) N% F; j$ n. v/ P$ u4 T& V
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},\" Q# A, u3 ~1 k' D9 ~1 z% b
    17.             while{ pos,
      - t& m; m4 X# j\" v  }
    18.                 p = and(pos,-pos),. K9 e; F- G5 f7 a' o3 u* h; e) v) A
    19.                 pos = pos -p,
      \" t1 J1 J0 w5 Y/ A. E* ~) k  I0 C
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))( t' {' q# m& p1 C. ^
    21.             }
      0 l, p2 X: T3 I: @6 P3 d
    22.         },3 Z% m\" N' c7 a0 ~
    23.         sum++' }- v+ ~5 j\" ]3 ^
    24.     }
      ! c) q\" R! Y, q) U* L
    25. };
      1 u4 ~, r- p+ Z\" K  R: ~+ R5 {2 n
    26. i:main(:tm,n:sum,upperlim)=
      ; M% ^* S/ f; x8 X% n
    27. {
      # W( d; a2 H7 K) |
    28.     n=15,, F+ Q, [! F' e* v
    29.     tm=sys::clock(),
      3 b' Q# d3 {8 [\" G* `/ {& ^
    30.     printff("Queens:{1,i}, ",n),\" o8 u8 Z\" e/ H1 q' G, E
    31.     upperlim=shl(upperlim,n)-1,
      ; _' f! h' ?, n& T
    32.     test(0,0,0),
      1 `/ i. T! X5 g# H0 m. D
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)\" i: I, X+ `& W; I
    34. };
      # A$ R2 f5 V, s6 A2 n3 q& A8 T
    复制代码
    Forcal运行结果:
    4 K7 ~" C) d  v0 B+ Q% L  U5 E
    0 W2 J9 h+ _7 a' g* t( e    Queens:15, sum:2279184, 59547毫秒., @- v- p4 v6 P/ l, Y) n

    . ~6 R# t6 ]9 W% ~例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右% @- {  Q# j3 I: b; C$ j2 C
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =
      # N8 o- d9 K( B
    2. {
      8 E8 M# j+ |) g2 ^  v
    3.         cr = y - 0.5,
      : v! I# h% m, Q( T
    4.         ci = x,
      + A\" ~6 ^) G1 ]0 w* i3 h
    5.         zi = 0.0,
      8 W; b+ f% ^7 }3 z' G
    6.         zr = 0.0,. G6 w; p; n! L
    7.         i = 0,
      9 W9 _# v6 |) F0 ~+ u2 V
    8.         (1).while {
      ; Q6 W6 }: }: p. I$ u
    9.                 i ++,% f  E5 M7 p4 C5 c
    10.                 temp = zr * zi,+ w6 k\" V1 K. B
    11.                 zr2 = zr * zr,! t) x! B5 Q- B* _' P
    12.                 zi2 = zi * zi,
      ) T, F  \3 E4 s, Y! y, R4 T
    13.                 zr = zr2 - zi2 + cr,
      + |$ U0 ?# S6 T1 d( Z% I1 n. i* k+ f
    14.                 zi = temp + temp + ci,
      + W\" w+ s( c* d+ d6 s) Z
    15.                 if [zi2 + zr2 > 16, return (i)],
      1 J1 C  g% I- t' s4 q4 q: F1 w
    16.                 if [i > 1000, return (0)]\" b\" M, D: N% [7 ]6 V
    17.         }
      - z4 `\" L) ?8 _2 M& z; G# K% A
    18.         . `' S& z( l0 r1 A6 d
    19. };
      / p6 o$ ^6 c6 y* h
    20. main (:i,x,y,old,now) = {
      6 P+ I1 m3 f9 ]\" o5 M: s
    21.         old=sys::clock(),6 y8 Y) ~( y5 c' N8 n
    22.         y = -39,
      - U/ v. u$ J) L' W/ B( q
    23.         while{  y < 39,' Z; H6 k  Y( O4 h  z: X1 N1 \
    24.                 printff("\r\n"),
      - R1 T5 {3 ^9 |( U( F' Y+ n+ C
    25.                 x = -39,
      - n, l# I5 L\" E$ @8 Q% N
    26.                 while{  x < 39,2 |9 {% y4 A& f2 Y( y# F. e
    27.                         i = mandelbrot(x/40.0, y/40.0),! b  t4 c7 U1 T; ~4 f0 W5 M
    28.                         which{        i==0,\" N& Q4 A  a$ S, d
    29.                                 printff("*"),7 ^* T\" o* r7 D; p. I3 V
    30.                                 printff(" ")
      $ w  M/ h9 @- y
    31.                         },
      2 B\" }0 a0 ?# U
    32.                         x++( _4 X+ ]3 F. Q, H# @( V, v
    33.                 },
      5 U6 I: b. G4 ]. V* g8 i
    34.                 y++) g) @( v2 ~9 ]. e
    35.         },
      ( D- d0 ^- O) o
    36.         now=sys::clock(),) h7 M! [' N  t6 k
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)
      1 c4 Y; L/ l8 Y6 F# ]2 ~
    38. };
      ' j9 x, a! G; k7 A4 A6 R! `
    复制代码

    6 ?5 L0 U+ u* h2 C$ t运行结果:
    * W3 b  n- X/ i3 V* O( q) L
    1.                                        *
      / Z/ l\" a2 Q  }* w
    2.                                        *
      $ w6 m! R/ l' p2 J$ k
    3.                                        *
      6 G4 l* P) ^0 @. N: N! \- Z
    4.                                        *( Q9 q* ]! L& v\" a
    5.                                        *7 d1 B$ B1 R5 e# {/ j) {
    6.                                       ***% f: J, B. g5 d- d
    7.                                      *****
      9 T3 Y0 C8 y- S# ~
    8.                                      *****
      ; P( a6 f4 \\" l, Y; r$ @. c. m
    9.                                       ***
      : e6 C9 }1 \7 s
    10.                                        *
      ' u% }1 A5 A& m' C3 q
    11.                                    *********
      8 J8 M; J1 L* @2 K
    12.                                  *************
      ; O; F/ s' ^) @4 f9 l! ~' A
    13.                                 ***************7 _7 b  G0 W/ S; W
    14.                              *********************
        [% w8 ]6 f- T0 @
    15.                              *********************
      8 C+ I, d1 R4 h) _! H6 h; F* Z
    16.                               *******************
      / M9 V0 P% n, }+ W* i$ u4 |' G' Z
    17.                               *******************
      , y8 D' t% g0 Z
    18.                               *******************
      * ?+ e9 w% q# I$ Z8 }  c% e3 }
    19.                               *******************
      , M- F  W3 c0 n# j; N( ~1 ]
    20.                             ***********************
      + b3 y- {* |, d) d7 k* ~
    21.                               *******************2 \5 r. B6 t: w3 `
    22.                               *******************
      \" @9 |, S+ g0 a6 b
    23.                              *********************5 w- S; [\" P9 ^6 j: [
    24.                               *******************) v, C8 j/ R0 J# q: ~
    25.                               *******************
        G6 `\" \  h4 f
    26.                                *****************
      7 l1 `! C0 j0 n0 }/ y4 M% ?  y. _5 q
    27.                                 ***************' u+ q1 o% i  d$ c2 k
    28.                                  *************) G& L& m$ k% K- T) g) C
    29.                                    *********3 o9 j! D  o$ ]8 y& K' \$ y
    30.                                        *
        U5 f! c4 e\" i3 {& S7 w
    31.                                 ***************, h4 P) ?) O& c# y! ~
    32.                             ***********************( y  J5 ]\" p4 L/ A! |
    33.                          * ************************* *
      * Q+ _! r! ~* i5 x\" x4 t) |
    34.                          *****************************' I2 @% T* M, @0 a
    35.                       * ******************************* *
      6 `, [1 }1 R4 u9 c$ T, |( K& A
    36.                        *********************************) _: l7 V6 [8 O' W0 F
    37.                       ***********************************
      , Q+ M/ W0 c4 P4 Y
    38.                     ***************************************  j1 n) g1 l\" ~. Z& e6 N, y: s
    39.                *** ***************************************** ***
      $ k$ m\" g1 @. x0 }2 |. P- L
    40.                *************************************************; D) `5 u* w; c; W: z\" q) L
    41.                 ***********************************************7 O& |5 B5 W6 `- M8 R4 N% E
    42.                  *********************************************
      ) X0 ~0 t+ y# P
    43.                  *********************************************
      5 Z( i! j: p& j
    44.                 ***********************************************. ~. s( E* B! Q' q: s$ I* K% ]
    45.                 ***********************************************
      \" b) h* j: x; ~\" B
    46.               ***************************************************+ n, r3 R0 @- l; G
    47.                *************************************************
      0 g% Z% R% S2 L7 B+ C
    48.                *************************************************+ E! W+ ~( E, ~
    49.               ***************************************************1 ?. {$ J; G% d2 e5 Q+ t  x# Z1 F
    50.               ***************************************************: Y0 M3 i, L' p
    51.          *    ***************************************************    *7 t3 T# T- K) i: b; a
    52.        *****  ***************************************************  *****6 M- I$ ?0 M0 l' ?$ j\" E( m
    53.        ****** *************************************************** ******7 b; l7 t5 z: ~; O  f3 K( k2 n9 F: B
    54.       ******* *************************************************** *******5 f) T# w8 `; T9 s2 [
    55.     ***********************************************************************
      : H- L' l' N' l5 E/ P
    56.     ********* *************************************************** *********& s/ A; L# @3 J# [, S* e
    57.        ****** *************************************************** ******. {5 x# K# {' s. h' w6 V
    58.        *****  ***************************************************  *****
      & o6 T9 Y9 J6 A3 [/ n4 K
    59.               ***************************************************\" o. [8 A( L& O: ?% ?
    60.               ***************************************************( D; A4 J) }: N- Q. ?( q; V/ c
    61.               ***************************************************6 u1 O+ n: m9 \1 O
    62.               ***************************************************4 P# O3 O; l- p* s
    63.                *************************************************  X% [+ U  `1 S$ t
    64.                *************************************************
      + [$ K+ T, }0 v  C  W
    65.               ***************************************************/ g, L9 j7 |) u# i. Z3 v5 x1 `
    66.                 ***********************************************- s3 k* m6 ~3 I1 r4 U
    67.                 ***********************************************
      3 T  E9 {1 ^# R  R  x0 t9 _- Q& \
    68.                   *******************************************5 J; D+ G% H0 G+ ]4 O, v5 t
    69.                    *****************************************
      8 n( d, t$ f% t( Z, M& O
    70.                  *********************************************
      . h% A$ \6 o6 ^& j6 ~; o% S5 F( Y
    71.                 **** ****************** ****************** ****  t& g% r- R- S: J: `' h* d
    72.                  ***  ****************   ****************  ***3 _% J* ]- R1 P! m$ c2 r0 v. s
    73.                   *    **************     **************    *& A& `* t\" I2 Y3 i, M
    74.                          ***********       ***********
      7 D2 n/ [. q0 ], a+ U( }
    75.                          **  *****           *****  **6 i9 [9 q0 w\" I+ P\" i7 l
    76.                           *   *                 *   *! n: U4 p6 U3 z9 H% h, s
    复制代码

    $ j6 G4 T" w2 J, l' W运行时间为:
    & m! T* C! Y0 m9 r" f: ?
    9 u+ w3 }; S, N6 n4 g        Forcal Elapsed 1.078
      W1 Y, X. \) j, C7 r$ W9 k( v
    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-11 10:44 , Processed in 0.699435 second(s), 52 queries .

    回顶部