当前位置:服务支持 >  软件文章 >  数学表达式编译计算动态库FORCAL测试指南

数学表达式编译计算动态库FORCAL测试指南

阅读数 6
点赞 0
article_banner
关于FORCAL <BR><BR> Forcal为Formula Calculator的缩写,是一个数学表达式编译计算系统,利用Forcal可以在软件中自由地添加各种数值计算功能。Forcal由一个功能完备的数学式编译器和一个速度极快的数学式编译代码计算器组成,从以下的说明中您可以了解到Forcal的全貌。 <BR>一、FORCAL表达式: <BR> FORCAL可以编译计算的数学表达式格式如下: <BR> 格式1:F(x,y,x1,... ...)=1-x+sin[x1]-... ... <BR> 格式2:()=2+3*ln[3.45] <BR> 格式3:2+3*ln[3.45] <BR> 格式4:F(x,y)=2+sin[aa]+cos[aa-x]+bb,aa=3*ln[y-bb],bb=x+y+x*y <BR> 格式5:{F(x,y)=2+sin[aa]+cos[aa-x]+bb,aa=3*ln[y-bb],bb=x+y+x*y} <BR> 格式1:F 为函数名,可为任意字符,或者缺省;自变量放在小括号( )内,有多个自变量时,自变量间以逗号分隔,自变量为以小写英文字母开头的任意小写英文字母与数字的组合,自变量个数可以为零;等号后为函数式,不可缺省。 <BR> 格式2和格式3是等效的,均表示无参函数。 <BR> 格式4:数学表达式的可优化表示形式。aa、bb为符号定义名,其命名方式与自变量相同且不能与任何一个自变量同名。该格式的计算顺序为从右向左,即:先计算bb,然后计算aa,最后计算F(x,y)并把该值作为整个表达式的值。 <BR> 格式5表示可以将表达式放在一对括号( )、[ ]或{ }内。 <BR> 函数式中的运算符有加号'+'、减号'-'、乘号'*'、除号'/'和乘方'^'五种,注意数字与自变量相乘时,乘号不可省略。函数式中可以用三对括号( )、[ ]和{ }。 <BR> FORCAL表达式有实数表达式和复数表达式两种。 <BR> 实数表达式中可以使用的基本函数如下: <BR> 一级函数:平方根sq,指数函数exp,常用对数lg,自然对数ln,正弦sin,余弦cos,正切tg,反正弦as,反余弦ac,反正切at,双曲正弦sh,双曲余弦ch,双曲正切th,取整函数int,绝对值abs。 <BR> 二级函数: <BR> 1、累加函数lj8(n,x):int[abs(n)]的取值范围为1~8,指定内存中的存储位置,x为双精度实数,当n>0时,该函数将x与内存中int[abs(n)]位置的内存数相加并重新存储到内存,同时返回相加后的数值,当n<0 时,在int[abs(n)]位置存储并返回x值; <BR> 2、反正切at2(x,y):求x/y的正切值,所在象限由x和y的符号确定; <BR> 3、最小值函数min(x1,x2,x3,... ...); <BR> 4、最大值函数max(x1,x2,x3,... ...); <BR> 5、余数函数fmod(x,y):求x/y的余数; <BR> 6、取小数部分函数modf(x):该函数把x分解成整数和小数部分,并返回小数部分; <BR> 7、符号传送函数sign(x,y):该函数的符号取y的符号,数值取x的绝对值,若y=0无符号传送,返回x值; <BR> 8、正差函数dim(x,y):当x>y时得x-y,否则返回0; <BR> 9、数值测试函数testdouble(x,y,z):该函数测试z是否在x和y之间,如果不在x和y之间,可由fcdllerr()函数检查到这个错误,该函数总是返回z值; <BR> 10、随机数发生器种子设置srand(x):该函数用来建立由rand()所产生的序列值的启始点,返回0; <BR> 11、随机数rand():该函数产生一个随机数,每调用一次,就返回一个0到RAND_MAX之间的整数,RAND_MAX的值由C++定义; <BR> 12、设置存储空间大小setstore(m):该函数设置int(m)个双精度实数存储空间,若int(m)<1,则删除该存储空间,返回0; <BR> 13、存储函数store(n,x):该函数将x值存储到由setstore申请的空间的int[abs(n)]位置,n是一个负数,返回x值; <BR> 14、取得存储函数的值store(n):该函数获得由setstore申请的空间的int(n)位置的值,n是一个正数,使用store函数可以进行多个表达式之间的相互通信,因而可以简化构建复杂的计算。 <BR> 复数表达式中可以使用的基本函数如下: <BR> 平方根sq,指数函数exp,自然对数ln,正弦sin,余弦cos,取整函数int,绝对值abs,共轭函数con。 <BR> 复数举例:2+3i。 <BR> 复数表达式举例:F(x,y,... ...)=2+3i-sin[x-i]*ln[y]- ... ... 。 <BR> 在复数表达式中不能使用 i 作为自变量,因为 i 已经用来表示虚数。 <BR> 另外,FORCAL编译器在编译表达式时能进行两种形式的代码优化,其一是预先计算表达式中可以计算的部分,其二是采用格式4表示的数学表达式的可优化形式。 <BR> FORCAL将最大限度地进行第一种代码优化,但这种自动进行的优化并不彻底,若要获得最优化的代码,您需要将表达式中可以计算的部分用括号括起来(一般情况下不需要这样做)。 <BR> 例如:要想进行彻底的第一种代码优化,需要将式子: <BR> F(x,y)=x-5-7+y <BR> 写成:F(x,y)=x-[5+7]+y或F(x,y)=x+[-5-7]+y <BR> 需要注意的是,在进行第一种代码优化时,只有一级函数可以进行预先计算,二级函数的计算始终只能在编译后的表达式中进行。 <BR> FORCAL的第二种代码优化可以保证表达式中的任何相同部分只进行一次计算,从而最大限度地提高了计算速度。 <BR>二、FORCAL的速度: <BR> 由于编译表达式所占的时间很少,所以这里只比较FORCAL与FORTRAN(或C/C++)的计算速度。 <BR> 1、对纯数学表达式计算速度的比较 <BR> FORCAL是由FORTRAN(或C/C++)的编译程序生成的,所以它的速度要稍慢些,约为FORTRAN(或C/C++)的编译速度的50%左右。一般,表达式越长越复杂,FORCAL与FORTRAN(或C/C++)的计算速度就越接近。 <BR> 2、综合比较 <BR> 综合比较是指由FORCAL生成的实用程序和由FORTRAN(或C/C++)直接生成的实用程序的速度的比较。在实用程序中,除了计算表达式外,还有很多的算法处理,这使得它们之间的速度差别在缩小,毋庸质疑,算法处理所占的时间越长,它们的速度差别就越小。另外,启动FORTRAN(或C/C++)编译程序进行编译和出错调试等要占用一定的时间,这些时间要远比使用FORCAL进行同样的工作所用的时间要长。所以,综合来看,除了运算量特别巨大的程序,使用FORCAL要比使用FORTRAN(或C/C++)进行计算要快。 <BR> 3、FORCAL的速度还能提高吗 <BR>回答是肯定的。因为FORCAL系统由编译和计算两部分组成,它编译数学表达式后的代码质量是非常高的,但目前使用的FORCAL由FORTRAN(或C/C++)生成,这使得FORCAL的计算代码中有些是不必要的,白白增加了执行时间。所以,如果FORCAL的计算部分用汇编语言来写,将能加快它的执行速度;如果让计算机的数学协处理器来执行FORCAL的计算部分,将能把FORCAL的计算速度推向极至。 <BR> 以上是作者本人的一些看法,FORCAL的功能和速度将在实践中得到检验。 <BR><BR> 直接下载: http://go5.163.com/wangluwanglu/xiazai/d_forcaldll.zip <BR> 或访问: http://wangluwanglu.yeah.net/ <BR><BR> 山东省工业学校工艺教研室(255070) 王 禄 <BR>

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
相关文章
QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空