Forcal运行速度测试例子
Forcal的运行效率与Lua相当,是目前最快的脚本之一,但Forcal的扩充性能更好。在大量函数调用时,Forcal更具速度优势。
以下是Forcal的运行速度测试例子,大家可转换为其他脚本代码(例如matlab)比较一下。
例1:Fibonacci递归程序(n取40)
SetRealStackMax(1000);
F(n)= which{
n == 0,
return(0),
n == 1,
return(1),
return
};
main(:t,n)=
{
t=sys::clock(),
n=F(40),
t=sys::clock()-t,
printff{"\r\nfibonacci={1,i}, fibonacci_Time={2,i}毫秒={3,i}秒\r\n",n,t,t/1000}
};
结果:
fibonacci=102334155, fibonacci_Time=41859毫秒=41秒
例2:八皇后问题
// 在运行不同的程序时,Forcal的速度,从接近C++到只有C++速度的几十分之一。
// Forcal的建议是:对运行时间较长的程序,如确有必要,设计成二级函数由Forcal调用,从而获得接近C++速度的性能。
// Forcal与C++是无缝链接的。故C++能实现的功能,借助二级函数,Forcal完全可以实现。
// 但没有Forcal支持的C++程序,将无法获得高效率地实时编译计算字符串表达式的功能。
// 据测定,以下八皇后问题,Forcal的运行速度约为C++的1/10。
// 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。
// 该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
// 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
// 以下算法是从网上搜来的,该算法没有最终给出排列组合,仅仅给出有多少种组合,但是算法确实十分奥妙。
//Forcal源程序
i:(::sum,upperlim)= sum=0,upperlim=1,SetIntStackMax(1000);
i:test(row, ld, rd : pos,p : sum,upperlim)=
{
which
{ row != upperlim,
{ pos = and{upperlim , not},
while{ pos,
p = and(pos,-pos),
pos = pos -p,
test(row+p, shl(ld+p,1), shr(rd+p,1))
}
},
sum++
}
};
i:main(:tm,n:sum,upperlim)=
{
n=15,
tm=sys::clock(),
printff("Queens:{1,i}, ",n),
upperlim=shl(upperlim,n)-1,
test(0,0,0),
printff("sum:{1,i}, {2,i}毫秒.\r\n",sum,sys::clock()-tm)
};
Forcal运行结果:
Queens:15, sum:2279184, 59547毫秒.
例3:一段有趣的程序:此例Forcal速度约为C/C++的1/4左右
mandelbrot(x, y : cr,ci,zi,zr,i,temp,zr2,zi2) =
{
cr = y - 0.5,
ci = x,
zi = 0.0,
zr = 0.0,
i = 0,
(1).while {
i ++,
temp = zr * zi,
zr2 = zr * zr,
zi2 = zi * zi,
zr = zr2 - zi2 + cr,
zi = temp + temp + ci,
if ,
if
}
};
main (:i,x,y,old,now) = {
old=sys::clock(),
y = -39,
while{ y < 39,
printff("\r\n"),
x = -39,
while{ x < 39,
i = mandelbrot(x/40.0, y/40.0),
which{ i==0,
printff("*"),
printff(" ")
},
x++
},
y++
},
now=sys::clock(),
printff("\r\nForcal Elapsed {1,r}\r\n",(now-old)/1000)
};
运行结果:
*
*
*
*
*
***
*****
*****
***
*
*********
*************
***************
*********************
*********************
*******************
*******************
*******************
*******************
***********************
*******************
*******************
*********************
*******************
*******************
*****************
***************
*************
*********
*
***************
***********************
* ************************* *
*****************************
* ******************************* *
*********************************
***********************************
***************************************
*** ***************************************** ***
*************************************************
***********************************************
*********************************************
*********************************************
***********************************************
***********************************************
***************************************************
*************************************************
*************************************************
***************************************************
***************************************************
* *************************************************** *
***** *************************************************** *****
****** *************************************************** ******
******* *************************************************** *******
***********************************************************************
********* *************************************************** *********
****** *************************************************** ******
***** *************************************************** *****
***************************************************
***************************************************
***************************************************
***************************************************
*************************************************
*************************************************
***************************************************
***********************************************
***********************************************
*******************************************
*****************************************
*********************************************
**** ****************** ****************** ****
*** **************** **************** ***
* ************** ************** *
*********** ***********
** ***** ***** **
* * * *
运行时间为:
Forcal Elapsed 1.078
页:
[1]