QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3216|回复: 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的扩充性能更好。
    3 h' f0 j' B/ x1 t$ J6 l在大量函数调用时,Forcal更具速度优势。% q" ~  v& m, n  g0 V+ a
    以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。2 {) j8 |9 ]5 m7 I# ^
    ' H5 @1 ]3 W9 \! W4 x0 @6 C
    例1:Fibonacci递归程序(n取40)
    ( @) J1 }- P. f1 ?4 I9 S3 j" K$ w8 [
    1. SetRealStackMax(1000);1 K9 T5 W$ {* ^5 p' ]$ u
    2. F(n)= which{
      3 K& {* c2 L# r, q8 _# g
    3.         n == 0,
      % {/ i, W1 \; P' |
    4.                 return(0),
      5 [. Q1 g: O% `  h  s4 p
    5.         n == 1,
      5 y% @. i6 ^9 _' a
    6.                 return(1),6 R1 b( M+ g. u9 m
    7.         return [F(n - 1) + F(n - 2)]2 `5 N6 ^6 a4 h\" P! L
    8. };1 z! r  z( i2 \( E3 M
    9. main(:t,n)=0 k+ U6 [8 z- W# _% v9 J0 z
    10. {$ V7 X# _, i$ l- D, d
    11.         t=sys::clock(),
      . X# {1 m8 M8 O\" s
    12.         n=F(40),7 R: V0 z- i  t( g' z\" b
    13.         t=sys::clock()-t,
      4 I; Y; @$ ~! q
    14.         printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}+ `$ ], |  ~. a+ n8 \
    15. };
      ' J. i\" p\" P% \
    复制代码
    结果:
      a9 g3 q2 g* q- V3 s8 V" P& _' x: L& S
    fibonacci=102334155, fibonacci_Time=41859毫秒=41秒" I# ~9 K; n  o2 z; Z! }; q1 B
    . m" r+ s( D) m' z
    例2:八皇后问题8 A3 l6 l  V" Q6 ~2 O( e6 i+ `
    1. // 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。
      , ]\" q' \1 V( s( h4 ^
    2. // Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。9 n6 Z* z\" |\" o' |1 x1 Z
    3. // Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。
      1 N8 t. ^. G! Y/ w
    4. // 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。7 z6 h- D0 T8 P1 H
    5. // 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。\" f& `% H/ j# k$ O/ a$ H$ z
    6. // 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。
      6 Z, m$ ?5 ^7 F1 p
    7. // 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
      7 ^& Y2 H  D* N8 K' L  j& y9 d
    8. // 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。7 V' N5 v9 z0 q! P1 N: [0 }
    9. // 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。 : S4 X' C9 i' g. z
    10. //Forcal源程序
      + k; p$ T; t( [  C4 W
    11. i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);
      & [+ O  ~- J$ \/ K( G
    12. i:test(row, ld, rd : pos,p : sum,upperlim)=( m9 \) [: }$ J5 F
    13. {
      \" ~/ F+ ]) q& p4 k) \; }4 P9 t
    14.     which2 O* q; s. L) w; y- k+ _
    15.     {   row != upperlim,) A8 s! ]7 Q' q) E3 \9 L\" [
    16.         {   pos = and{upperlim , not[row.or(ld).or(rd)]},: R3 |. n/ P( p# I5 E/ {: q- a; U
    17.             while{ pos,: z\" X& G& Y( H6 L# g+ p8 o
    18.                 p = and(pos,-pos),
      . v. I' c# G! R/ v# n' m- y
    19.                 pos = pos -p,
      3 M0 P  K3 ?8 j- W7 j
    20.                 test(row+p, shl(ld+p,1), shr(rd+p,1)); c7 y8 R1 p5 V. l  g, K, v7 S/ c
    21.             }9 U- ~- E1 b+ N9 m: w9 o8 S) f
    22.         },6 b' [4 D; J3 |8 F
    23.         sum++# _' i* r, h5 [: T' ?
    24.     }
      6 g! G& x8 M. `
    25. };, X\" N8 P. g9 L\" y7 Q+ e
    26. i:main(:tm,n:sum,upperlim)=; ^+ ^+ J5 k3 O( {
    27. {
      ; T  g* N* i0 b+ p5 A- C
    28.     n=15,
      6 c! J# H/ g$ ^# B5 Y5 G0 y. G. Y
    29.     tm=sys::clock(),, A2 W- G# W( N9 f$ f1 n0 V
    30.     printff("Queens:{1,i}, ",n),
      7 Q. F8 e% M0 K
    31.     upperlim=shl(upperlim,n)-1,
      ' `& ~9 {7 U: N) N  T, s$ A; o
    32.     test(0,0,0),
      6 a3 Q* n+ u3 G3 w
    33.     printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)
      : z' r  {8 W. `1 ^6 m9 W
    34. };- u: f4 A9 r; N; V\" k% J! J5 j
    复制代码
    Forcal运行结果:
    9 p# l0 D4 z! @% Q5 u- K1 V/ a, b' Q: h
        Queens:15, sum:2279184, 59547毫秒.
    . Y( Z% M+ F/ l( \0 g* x: ~& X6 \& i. A0 I
    例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右
    9 |; c3 S. T' X1 k) D/ r( q
    1. mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =
      8 v5 C8 ~) J) w4 x/ P
    2. {  v\" H; S1 Q& _8 O2 ~
    3.         cr = y - 0.5,- s  {  a3 f, |* E1 B7 ?
    4.         ci = x,8 c0 x  s1 Y6 ^* Z. s+ a
    5.         zi = 0.0,
      ( q7 H* h; g4 Z. i/ w
    6.         zr = 0.0,1 c, z: S# E+ ^/ o
    7.         i = 0,1 ]/ }. Q5 }7 y/ ]4 R8 B
    8.         (1).while {7 ?% Q  q2 d! f! M( N4 q; L: w; `. D
    9.                 i ++,7 Q! S7 d$ H8 h( @
    10.                 temp = zr * zi,
      \" M6 k6 t  G! l) c4 y: A* }/ x
    11.                 zr2 = zr * zr,
      * H8 ]. `4 ?4 r# g
    12.                 zi2 = zi * zi,, s/ b, S2 [9 `/ e6 i
    13.                 zr = zr2 - zi2 + cr,0 d( R% q7 P( d\" z
    14.                 zi = temp + temp + ci,6 Z* S; c7 U, V$ n8 P& K
    15.                 if [zi2 + zr2 > 16, return (i)],) m! X* ~+ i) |9 m
    16.                 if [i > 1000, return (0)]$ o; D9 m: T8 n  y; u* b5 Z# q1 g' d
    17.         }. _  }! H3 A8 D7 V% O
    18.         8 e/ f0 e2 t! W9 T; a0 t) S# f
    19. };\" P! ?$ I+ L5 \* c7 y9 d; X
    20. main (:i,x,y,old,now) = {
      0 O; w1 C( X  D) r2 Y) T+ F
    21.         old=sys::clock(),
      * X$ P) {0 r/ J. o9 N9 T
    22.         y = -39,- c6 A4 |5 ?+ t+ p- q9 x2 l% ^
    23.         while{  y < 39,- R( h: c) e1 F5 c+ ?5 Y5 b
    24.                 printff("\r\n"),
      ! m) G2 f& F! K/ y6 I, g% o( P
    25.                 x = -39,
      1 H, G& }- R* D5 i
    26.                 while{  x < 39,
      2 ]& r/ I7 N7 x& x8 ]$ e
    27.                         i = mandelbrot(x/40.0, y/40.0),
      0 m1 u5 l4 N/ c+ N: }
    28.                         which{        i==0,4 S- a% S, F8 L
    29.                                 printff("*"),1 r4 y) u$ c9 j$ [( _! v
    30.                                 printff(" ")8 J! l) v0 u: Z4 h3 h8 M
    31.                         },
      ) Y. S3 V/ r! U( w% L
    32.                         x++% u* l5 I\" Q0 f, f; y- e# x
    33.                 },* _2 |3 \: O2 H. d4 B% h4 q
    34.                 y++! Y+ K/ e3 G- S) T
    35.         },: L, |1 F\" X7 \/ I\" i- I( K
    36.         now=sys::clock(),
      # x9 Q, W\" n3 O6 n8 Q6 S' p, Q
    37.         printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)6 q, o4 k6 F8 [9 J
    38. };' }  c+ X# t$ [
    复制代码
    , O( |0 N: i: ]7 a
    运行结果:
    0 d' z8 \, ]. O# u" q9 \
    1.                                        *. R6 A! g, `4 j' K4 v
    2.                                        *
      + o0 S9 K1 }9 U, O7 L
    3.                                        *
      6 }0 g5 z/ O  ^7 j
    4.                                        *9 m# m' c: I; x* H; n
    5.                                        *' W. D/ j; q2 p: ^+ N# z3 Q) C
    6.                                       ***
      9 I) S2 p0 v$ [* K1 }8 v6 e; M$ ~
    7.                                      *****
      - G: J\" ]# m/ g% ?! P5 @: b' ]3 }
    8.                                      *****
      2 p3 q' I) m* w/ [
    9.                                       ***
      8 L6 `  c) }7 \6 F' W2 |
    10.                                        *9 L4 e& X1 \. [# Y1 H. E$ t' A
    11.                                    *********
      0 Y2 X. X* u0 T# F
    12.                                  *************' D. \- L( y2 T9 i% o# D5 z
    13.                                 ***************
      3 h) e7 c! P3 d7 m. p
    14.                              *********************- `4 H$ p, j; W5 M# @1 Y  w' j* m
    15.                              *********************
      ! X3 K& k( y% x7 F: t- F4 {
    16.                               *******************; M! F6 g  {! {2 t3 L, v+ Q4 z
    17.                               *******************
      8 j; e( `0 x' y, ]
    18.                               *******************
      % }% ^& `, u+ t9 Y9 c. |
    19.                               ******************** ]3 g1 W$ M9 `1 i
    20.                             ***********************
      9 ]  i! i& m9 x5 {! S; T3 o; }
    21.                               *******************
      - k5 T- |, i$ V7 l8 V
    22.                               *******************( A$ h2 V( X  k8 e8 \
    23.                              *********************
      ' ^$ e! v6 h( j  [4 a4 J5 _
    24.                               *******************! k# m/ Z1 V# f2 D4 c
    25.                               *******************
      % e# h2 v/ t$ r% I
    26.                                *****************% }1 O2 ]) q\" e% R/ W
    27.                                 ***************
      ( O2 U) ]& q& P' O\" ?6 Y6 a5 y) u
    28.                                  *************
      8 w& S' k( J* T, j5 E# ?
    29.                                    *********
      ! }7 K, c+ O+ w5 {8 l
    30.                                        ** {' q. W- b3 q6 P
    31.                                 ***************
      $ a$ e2 j% j# z1 I* k6 _
    32.                             ***********************
      5 i# h: [: j3 @7 R
    33.                          * ************************* *
      9 n3 b# e' X$ X; u. z\" P3 n
    34.                          *****************************
      6 Z% ?& R( c' p2 n, I+ G# {
    35.                       * ******************************* */ p1 y6 E* w$ q2 p* V
    36.                        *********************************) k& `9 m1 S2 N3 l+ A6 Q6 M
    37.                       ***********************************
      # }5 u2 Y' U/ w: b# ~
    38.                     ***************************************
      2 ~. s\" D' P0 Y) t6 d- R5 q\" f* Y# Z
    39.                *** ***************************************** ***( m8 Y4 ~$ A\" B3 A
    40.                *************************************************  o: W! y# V8 ~& I
    41.                 ***********************************************: b* ^+ S: H+ I\" c! k
    42.                  *********************************************# K/ F. P9 _\" \7 i& O
    43.                  *********************************************/ g8 r, d  b( U' f
    44.                 ***********************************************. ~2 q- m! `0 P1 {' n\" O
    45.                 ***********************************************+ ?9 E4 R4 O* A
    46.               ***************************************************8 ~$ c6 V2 _5 q: O
    47.                *************************************************5 F/ E- _  Y0 q
    48.                *************************************************
      * J: r8 v2 E% P, N5 H6 R9 c\" ?, k% q2 I
    49.               ***************************************************$ T, i$ _' V/ m7 d; g
    50.               ***************************************************
      # @6 j. ?2 s: Q) [# X3 |
    51.          *    ***************************************************    *
      ! `- T( N& u* q9 w6 I- y5 R
    52.        *****  ***************************************************  *****
      + \7 {' V- Z4 ^+ P9 E# U# e7 r+ \
    53.        ****** *************************************************** ******
      4 B- R( A4 Z$ |% `
    54.       ******* *************************************************** *******\" R3 v$ v- d& X2 x. C
    55.     ***********************************************************************2 r: C+ `' j  H
    56.     ********* *************************************************** *********- s; _8 ?' `: t. z- d
    57.        ****** *************************************************** ******
      $ @3 Y' f1 A! g/ y: @
    58.        *****  ***************************************************  *****
      ) V8 }  f4 I! n$ a! l
    59.               ***************************************************, J2 F3 ~+ \% D2 E
    60.               ***************************************************
      ! ^6 p: f+ x# W( Q# j
    61.               ***************************************************( b8 l, [& b0 A. Z( m
    62.               ***************************************************8 }9 J# z5 ~2 P* ?\" ?
    63.                *************************************************6 {: a/ D2 g3 t$ e5 L2 Q$ c
    64.                *************************************************
      2 j0 W7 S, ]; d& g: N6 s1 B$ T) Q9 `
    65.               ***************************************************+ Y- \& a  k' z9 L7 I) v% Y8 O# x
    66.                 ***********************************************
      8 o$ r0 c( i( r, e6 t
    67.                 ***********************************************
      . h. X+ J& ~: I5 M& P
    68.                   *******************************************
      + o- g; [3 {7 M7 _1 k
    69.                    *****************************************\" U9 f( U6 a% F8 W
    70.                  *********************************************( ~& @7 I8 @+ {7 s+ v9 s3 F& F& l
    71.                 **** ****************** ****************** ****. y0 X2 I; V( Y
    72.                  ***  ****************   ****************  ***0 u$ Q8 U1 _3 }2 o2 J4 w' V0 H% @
    73.                   *    **************     **************    *
      % z' @1 c$ {3 ]  y0 M$ v3 \
    74.                          ***********       ***********
      ) U; `' N& u! x/ s
    75.                          **  *****           *****  **# u3 c/ U* D1 b9 ~2 J* e+ g6 U
    76.                           *   *                 *   *: q8 Y; }/ `9 |
    复制代码
    9 F3 i2 r8 T! r" @
    运行时间为:8 b2 f9 Y* q( S' P7 {
    7 M* e+ S2 d) y
            Forcal Elapsed 1.078
    , W6 k: P% n7 o6 V+ E
    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-19 19:34 , Processed in 0.370342 second(s), 52 queries .

    回顶部