QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3213|回复: 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的扩充性能更好。
    . }: m% {  X4 D7 [( m& m# _: j, T) g" N* V在大量函数调用时,Forcal更具速度优势。
    9 Y  W4 e/ f$ _3 V  ~以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。
    " k6 O( t2 N6 r( \+ t; C6 p/ ]4 m) g, E3 ]
    例1:Fibonacci递归程序(n取40)
    6 }3 N7 I2 e$ E  Q& f. `
    1. SetRealStackMax(1000);
      ' f; V. E: }6 w7 S+ u( x+ B
    2. F(n)= which{4 f+ ^/ ~\" C8 e
    3.         n == 0,( ?2 w6 Z8 l- w: K
    4.                 return(0),
      3 _  w$ f) x: z' Z3 Q8 o
    5.         n == 1,
      # W9 |4 M. h$ G: t
    6.                 return(1),
      , u2 G- C) v\" s% K) u
    7.         return [F(n - 1) + F(n - 2)]
      * k/ K7 S2 q- z- Z\" g
    8. };
      ' {$ x6 x\" }4 j
    9. main(:t,n)=
      4 m3 G9 S' N: z+ B' P7 V) ^
    10. {* k1 K) L9 s3 P
    11.         t=sys::clock(),
      4 a* N0 f: [2 J: R' h& Y9 N, w
    12.         n=F(40),) _  _' E3 T6 [' i; ^
    13.         t=sys::clock()-t,
      $ [. `) i; ~/ U3 k
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}
      7 d6 c0 q7 a. m# c9 E8 n
    15. };
      # m* B6 g1 t# b: e' B0 F, @+ I
    复制代码
    结果:
    - M) |( N. M! i: s6 t; A3 J) h8 L6 R) t! \& X' P9 Q
    fibonacci=102334155, fibonacci_Time=41859毫秒=41秒- s$ R  _) K8 K  h
    # B& n/ ]% P1 ~7 k
    例2:八皇后问题, m( ^. n% e; Z/ [  e' U6 t
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。
      6 U( U0 z1 y* K) Z. ~
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。) f5 p# M9 `, T+ O4 X
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。
      3 x3 S$ g' U1 O& M2 B; {6 y. O
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。
      / C; o+ V3 i: W9 {
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。: b( z/ i9 n+ u; P
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。
      ' ]; F; _% |& J. v, `
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
      + p; W6 B$ |% a$ b1 h
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
      , L5 ?- i# B  y; `
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。 5 v- u  C$ A4 S- ?2 k
    10. //Forcal源程序
      * {' H+ I# M. m\" Y& h1 I
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);  Z7 i8 ~8 m- _: [  p1 i
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=
      & F; H9 O) T- s4 O/ L2 D8 s
    13. {
      : E2 Z6 }) d/ v8 m0 g
    14.     which) w- ]7 H% g0 c5 n2 f
    15.     {   row != upperlim,
      ' o! E* `4 r+ Q) y+ `1 }
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},1 o7 l! i# T9 |! f7 _: F) F$ G1 g7 p
    17.             while{ pos,
      / C* V2 P9 o6 N( P% g4 q; S0 ], z
    18.                 p = and(pos,-pos),5 b; L\" u7 p' Y/ Y\" x
    19.                 pos = pos -p,
      $ v- f5 a- s4 B\" A& _8 F5 q% K
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1))& n; f. ~4 G% d9 G. I
    21.             }# I- I4 R+ _$ u8 j9 f, K. r& t# L
    22.         },
      0 t' o1 ^# a% c0 @9 l) e+ u
    23.         sum++
      5 v9 B5 ?, S  D
    24.     }
      ! A% L- ?1 t7 ?\" o' F
    25. };) m9 U% W5 z. |- B$ O1 g4 j. v
    26. i:main(:tm,n:sum,upperlim)=1 x, I3 Y6 Z. ]8 x2 g
    27. {# K* b8 H6 r  y- S
    28.     n=15,3 p. v- _$ |  s( v$ A: l. z
    29.     tm=sys::clock(),7 ~- D8 R3 Z8 o* D
    30.     printff("Queens:{1,i}, ",n),
      - X# _1 G, |- f- q* T
    31.     upperlim=shl(upperlim,n)-1,
      # b& K\" Z$ S* j2 H. g- o\" `
    32.     test(0,0,0),
      $ z' I) ]  B9 D
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)7 Z3 i4 Q7 ?# P0 Q
    34. };7 p. c6 r7 G5 u1 u/ Z
    复制代码
    Forcal运行结果:& m. U8 n" w0 R+ K  Z, D3 l8 [

    4 V7 `$ I1 r4 y    Queens:15, sum:2279184, 59547毫秒.
    ' w) @) Z& S+ A$ l$ w" i  e  `4 h
    * h* _. j- j: ^  f& J3 Q2 {, t' c例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右
    6 \7 T2 q$ Q( J1 Q" e6 {' P/ i0 m/ d
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =8 t  K4 j; F# d+ ^) F
    2. {  @- J: _* n' C# _1 g
    3.         cr = y - 0.5,3 e& Q$ o\" E- E' f' }
    4.         ci = x,( w+ g* c& [# @8 @7 p  \! D& A) J
    5.         zi = 0.0,
      0 g9 c1 Q  N. ]6 B+ F\" s4 `) B, m
    6.         zr = 0.0,4 C* r1 u' R' W) B
    7.         i = 0,( t4 K\" z; n, `4 [
    8.         (1).while {! z5 M8 z9 Y2 g$ Q
    9.                 i ++,1 C* s6 L4 T. H* g0 d
    10.                 temp = zr * zi,
      ; M6 b5 L4 u) O9 o+ d
    11.                 zr2 = zr * zr,
      1 F# h$ U1 i5 i
    12.                 zi2 = zi * zi,
      + d! m8 K# n* L. _* E! z& Z7 t6 R
    13.                 zr = zr2 - zi2 + cr,
      ) O6 \2 @7 u\" m0 j\" _
    14.                 zi = temp + temp + ci,- t) u6 w5 J% ?
    15.                 if [zi2 + zr2 > 16, return (i)],5 @# D& {\" C\" _; p2 i+ Z: C9 E
    16.                 if [i > 1000, return (0)]
      ! B0 }! p& r7 [
    17.         }: ~& r+ `0 B' m& p4 M7 _' @
    18.         / T! i0 X! Y0 K
    19. };7 a- T: j! F9 q! b  @# p! c1 q\" e6 H& @
    20. main (:i,x,y,old,now) = {
      4 _9 v9 |7 O2 S* r9 i
    21.         old=sys::clock(),4 R# Z' P* J9 m4 c6 q
    22.         y = -39,
      + F8 w, B( F1 ]
    23.         while{  y < 39,3 m, f* E8 k7 {6 x7 Z
    24.                 printff("\r\n"),
      * h$ q/ Q& d, E6 y- a4 m# Z, O
    25.                 x = -39,
      ; I4 G! P% Y) i. k4 H  {
    26.                 while{  x < 39,
      \" i' }$ \+ t7 D9 ^* ~
    27.                         i = mandelbrot(x/40.0, y/40.0),8 R( I$ K( z! a
    28.                         which{        i==0,
      $ z\" y% h: h5 H
    29.                                 printff("*"),
      . t8 y1 W3 G0 i3 q6 Y/ z8 `# b
    30.                                 printff(" ")
      / C+ K% Q9 H\" ^4 @  `+ I' w7 N
    31.                         },$ o4 D, N  g, e
    32.                         x++  D4 _/ @: ^) |5 z1 j/ w0 G, {* t' y
    33.                 },
      & k( Y* R2 f6 U( N+ X% [# P
    34.                 y+++ k6 L! b! s$ s% z4 M3 p- N# X
    35.         },
      6 B; R1 I$ H( o/ x4 a, w
    36.         now=sys::clock(),* y5 B, q# \) r) B5 }5 I
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)
      ; U5 u) q7 y\" @6 ~' b/ j' L; }. @
    38. };: N4 r8 `  U! ?( P8 G7 w
    复制代码
    6 S" s' z/ M5 E1 ^
    运行结果:
    1 D6 l. m4 [: B8 c3 q  y& W2 ?
    1.                                        *2 \- d\" @3 e& P, N3 O5 R
    2.                                        *
      . e1 f+ m' V% m. h2 r) @* E
    3.                                        *, p0 s0 }# ~# D, e& _2 q5 L. Z
    4.                                        *
      9 r4 H1 T+ @\" p3 {2 W2 W
    5.                                        *
      + Y. p8 M: h) P5 P! P
    6.                                       ***
      6 a* ]4 F/ X& ^
    7.                                      *****% N1 h5 Q7 q& l4 X
    8.                                      *****
      - B) ^7 @2 d; F
    9.                                       ***( i: y7 M  f\" Q. G: Z3 N7 E+ m
    10.                                        *
      ) v* m0 }5 F) N8 V  ^, o$ ]
    11.                                    *********
      \" p% T1 ^& d0 I: l
    12.                                  *************: l1 U! j' e4 |! w; I2 Z' a
    13.                                 ***************
      1 I* S3 `) L( D, b# ]- O2 h
    14.                              *********************
      % v2 s7 y- ]\" x8 K
    15.                              *********************
      # ?7 u% J1 `* ?# X% y/ S7 M0 t7 U- b
    16.                               *******************\" ^0 a7 ]/ f5 `0 e+ {' Y! s
    17.                               *******************! k& S) D# w7 |5 _9 h\" ^
    18.                               *******************
      % D6 x- w9 }; g& w1 X, ]' s
    19.                               *******************9 N# \1 h6 t% I  \+ E, K
    20.                             ***********************: |, g' k/ c\" L8 v) f
    21.                               *******************/ P# w0 ?; h3 L, @7 v\" S, I
    22.                               *******************6 t% x5 o& f/ u4 Z\" c7 j/ x' a4 k( ?
    23.                              *********************
      * H: |6 Y, Z1 B# }/ j
    24.                               *******************! T* s& L# a/ s. h
    25.                               *******************2 I8 e\" I  D\" A! W  U
    26.                                *****************- c( I  n; F, ~4 s. O% ]; `
    27.                                 ***************
      , z5 m) F& |3 o1 c' U
    28.                                  *************
      7 t4 @; |8 X5 b, f
    29.                                    *********2 c) H4 y& u& i) w. |( T2 V8 J
    30.                                        *
      # W6 _7 D6 k7 u  Q& Z9 Q% |, G' Q
    31.                                 ***************% h% `& P\" {. E  q3 q( [
    32.                             ***********************: `8 j; N+ J, M% C& V
    33.                          * ************************* *6 v0 C$ h$ q9 R: x, ?
    34.                          *****************************\" ~* X. L# a6 \! s
    35.                       * ******************************* *  |/ s6 i9 G! F5 O$ D4 W/ }
    36.                        *********************************
      4 T8 t7 M- o, E$ ~  F0 R: G) p
    37.                       ***********************************6 Q! N  n5 V# j) r8 f/ w9 I2 n7 V
    38.                     ***************************************' {  `' k3 I7 B0 S- a8 c
    39.                *** ***************************************** ***8 R0 B& Q& l) r8 ]7 S9 h
    40.                *************************************************8 l9 b+ ]' q; u
    41.                 ***********************************************7 ^% d7 Z4 _; q$ t3 ]* Q+ I' U, [+ X! z  P
    42.                  *********************************************
      ; C, ]9 I\" H\" i7 f) o
    43.                  *********************************************
      & a2 J% ~, }( U. T1 F! }
    44.                 ***********************************************
      2 Z9 a' k/ ?7 z: I) S! A7 ?\" Q
    45.                 ***********************************************
      5 f% q$ R3 V( v$ D8 j, a8 ~) M
    46.               ***************************************************2 |( r7 n: X) j7 S6 n
    47.                *************************************************! ~/ D1 b% D  U- q& y9 T
    48.                *************************************************$ r' U+ g4 X- J/ N
    49.               ***************************************************
      ) n2 Q  U6 n9 O
    50.               ***************************************************8 L0 j8 n; R9 W, s# x) P7 b
    51.          *    ***************************************************    *+ D$ l4 Q( A' F8 q/ ?$ X
    52.        *****  ***************************************************  *****4 w, ]- W* R9 \0 \8 Q
    53.        ****** *************************************************** ******
        }* v2 m$ G0 o6 H% }\" z. z, E9 _
    54.       ******* *************************************************** *******5 o* j; x* @( }/ n
    55.     ***********************************************************************
      % K( d\" @9 b! H9 ^6 v
    56.     ********* *************************************************** *********
      ( e! `% B$ U$ U' E* |
    57.        ****** *************************************************** ******
      + ^; |& e6 r5 \. s
    58.        *****  ***************************************************  *****
      ' d+ u4 A. E3 y; d; Y% u
    59.               ***************************************************
      2 a. g9 l. M9 b  c2 E9 ^6 e8 h( {
    60.               ***************************************************. y$ L7 d$ O4 B! h6 c
    61.               ***************************************************. X3 M3 Y5 B+ x7 A& m
    62.               ***************************************************
      ; }; Y( D. o' D$ i4 Z4 W. J* F
    63.                *************************************************4 g5 ?6 n8 h, G( m3 U$ K
    64.                *************************************************
      ! |- o6 w0 J% ]! E
    65.               ***************************************************
      $ u, i, m  \5 N\" Q- R
    66.                 ***********************************************
      ; ~& q+ T& O! @8 X- k9 a
    67.                 ***********************************************
      7 D+ |' P; R6 E; ]\" [+ I9 [
    68.                   *******************************************1 z4 k1 g( s7 c) s. Q3 x# v
    69.                    *****************************************3 W; V+ [6 L7 g3 ?0 {4 a. c4 d1 R
    70.                  *********************************************
      , A/ z& C\" J7 Q7 R! Z- L5 M6 o0 G9 _. b
    71.                 **** ****************** ****************** ****
      # {$ A6 d/ U% |, W+ X  \
    72.                  ***  ****************   ****************  ***
      0 d) [2 ]% r' i
    73.                   *    **************     **************    *' ?) S& g5 K+ {0 `+ i4 V
    74.                          ***********       ***********7 t/ I) u$ s! D6 T) M2 F% m2 d
    75.                          **  *****           *****  **
      : \2 }  S. z3 m3 R; N
    76.                           *   *                 *   *
      ! W: I& L: L9 z8 f+ T
    复制代码

    : q& @' @4 J* C( G) z6 a+ F运行时间为:
    7 K8 p# \7 Y2 p  S
    0 T& ]7 p4 P. H3 D$ @        Forcal Elapsed 1.078
    / X' I% P* c$ I% z, k) I9 n9 Y
    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-18 04:40 , Processed in 0.387985 second(s), 54 queries .

    回顶部