关于exp.dll的声明
您可以自由传播exp.dll测试版而不受任何限制,但exp.dll正式版未经授权,禁止以任何形式传播。同时,对于这两个版本的动态库或静态库,您都不能仿制、解密或作其他任何形式的更改,否则将在法律许可的范围内受到最大可能的起诉。
性能指标:
系统可支持Windows9X/NT/2000/XP 或Solaris(测试版只提供Windows的版本, 且会产生日志文件)
系统计算性能:
1. 编译表达式速度 >300KB/S (在400MHz CPU下测试)
2. 计算速度为直接使用C的表达式的42%
以上测试结果分别在以下系统中测试:
Windows 98 PII 400MHz(1 CPU 192MB RAM)
Windows 2000 Pro PIII 800MHz(1 CPU 256MB RAM)
Windows 2000 Advanced Server PIII(志强) 700MHz(4 CPU 4GB RAM)
Sun Solaris E5500 400MHz(8 CPU 2GB RAM)
测试版与正式版的区别:
测试版除不支持多线程,在系统功能和性能上,测试版与正式版没有任何区别,但测试版在使用中会产生用于测试的日志文件,而正式版不会。且测试版不提供Solaris的版本。
如需要注册正式版,请与作者联系。
使用方法(函数接口详见exp.h):
本系统的公式定义格式
例:
1. func_name(x, y, z) = sin(x) - usr_func_name(y - z) + x-y^(z+3.6)
2. func_name() = sin(13)-cos(33)
函数、自变量名称不区分大小写, 函数名是由字母加数字或下线组成
此外也支持对象定义,例:func_name.f1(x.x, x.y, x.z) = x.x + x.y + x.z;
注:本系统定义的函数可以调用用户自定义的函数,例:
func1(x, y) = (sin(x)-cos(y)) / (cos(x)-sin(y))
func2(x, y, z) = func1(x - y, y - z) + func1(y-x, z + y)
注意,如果用户自定义的函数中出现递归式调用,系统在计算时会返回
栈溢出的错误,而计算失败
如果用户要对表达式进行编译优化,只需对要优化的部分加上括号即可,例:
如果想对f(x,y)=x - 5 - 7 + y进行优化,
只需写成:f(x,y)=x+(-5-7)+y即可(通常不需要这样做,系统会自动做最大限度的优化)
系统支持的运算符及优先级:
( )
^ 乘方x^y -> x的y次幂
* /
+ -
== < > <= >= <>
&& //a && b, 如a <>0 并且b<>0返回1, 否则返回0
|| //a || b, 如a<>0或者b<>0返回1, 否则返回0
系统支持的标准函数:
max(x,y) 求x,y的最大值
min(x,y) 求x,y的最小值
mid(x, y, z) 求x, y, z中的中间值
if(x, y, z) 如果x<>0则返回y,否则返回z
abs(x) 求x的绝对值
pi() 返回 3.141592653589793
ep() 返回 2.718281828459045
acos(x) arccos(x)
asin(x) arcsin(x)
atan(x) arctg(x)
atan2(y,x) arctg(y/x)
ceil(x) 不小于X的最小整数
cos(x) cos(x)
cosh(x) x的双曲余弦
div(x, y) 取x/y的整数部分
mod(x, y) x/y的模
exp(x) e^x
floor(x) 不大于x的最大整数
hypot(x, y) z^2=x^2+y^2 求z
ln(x) x的自然对数
lg(x) x的常用对数
log(x, n) 以n为底x的对数
pow(x,y) x^y
pow10(x) 10^x
random(x, y) 产生一个随机数z, x<=z<=y
not(x) 如x<>0返回0, 否则返回1
xor(x, y) 如x,y中有且只有一个非0值返回1,否则返回0(异或关系)
sin(x) sin(x)
sinh(x) x的双曲正弦
sqrt(x) x的算术平方根
sqr(x) x^2
tan(x) tg(x)
tanh(x) x的双曲正切
int(x) 取得X的整数部分
ceil5(x) 对X,4舍5入为整数
sgn(x) 符号函数x>0返1,x<0返回-1, x==0 返回0
nPr(n, m) 求P(n, m)从n中取m个的排列数
nCr(n, m) 求C(n, m)从n中取m个的组合数
NN(x) 求x的阶乘x!
调用举例:
//test.cpp
#include "stdafx.h"
#include "exp.h"
InitDllSession_t InitDllSession;
CompileDllString_t CompileDllString;
LoadDllExp_t LoadDllExp;
RunDllExp_t RunDllExp;
UnloadDllExp_t UnloadDllExp;
FreeDllSession_t FreeDllSession;
IsValidNumber_t IsValidNumber;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
HMODULE hmodule = LoadLibrary("exp.dll");
InitDllSession = (InitDllSession_t)GetProcAddress(hmodule, "InitDllSession");
CompileDllString = (CompileDllString_t)GetProcAddress(hmodule, "CompileDllString");
LoadDllExp = (LoadDllExp_t)GetProcAddress(hmodule, "LoadDllExp");
RunDllExp = (RunDllExp_t)GetProcAddress(hmodule, "RunDllExp");
UnloadDllExp = (UnloadDllExp_t)GetProcAddress(hmodule, "UnloadDllExp");
FreeDllSession = (FreeDllSession_t)GetProcAddress(hmodule, "FreeDllSession");
IsValidNumber = (IsValidNumber_t)GetProcAddress(hmodule, "IsValidNumber");
char buf[1000] = "mf(x,y)=((cos(x-y)*sin(x+y)-sin(x-y))/(sin(x)-cos(y))+1)^(1.343 * log(abs(x+y))) +( 3 +4+5+6+7)";
void *pSession = InitDllSession(5000);
static char pbuf[10000];
int j;
j = CompileDllString(pSession, buf, pbuf, 10000);
LoadDllExp(pSession, pbuf);
double param[2];
param[0] = 1.0;
param[1] = 2.0;
double ret;
int err;
err = RunDllExp(pSession, "mf", param, &ret);
FreeDllSession(pSession);
FreeLibrary(hmodule);
}
如有任何问题,请与作者联系。
王真
E-mail: wangzhen_pub2@95777.com
wangzhen_bupt
- 粉丝: 2
- 资源: 5
最新资源
- 共创在线考试系统(JSP+SERVLET)130223.rar
- 俄罗斯方块(java+applet)130228.rar
- 会员管理系统(struts+hibernate+spring)130226.rar
- 会员管理系统(struts+hibernate+spring).rar
- 基于J2EE在分布式环境下的底层结构(外文翻译+文献综述).rar
- 基于JSP的畅想空间电子商务系统.rar
- 基于JSP的网上购物系统的设计与实现(源代码+论文).rar
- 基于JSP的房产中介系统的设计与实现(源代码+论文).rar
- 基于JSP电子商务系统?(论文).rar
- 基于jsp的新闻发布系统(论文).rar
- 基于matlab的数字图像分割技术研究及实现(论文).rar
- 基于jsp网上书店(源代码+论文).rar
- 计算器(java+applet)130228.rar
- 家庭理财系统(java+applet)130227.rar
- 教材订购系统(jsp+servlet+mysql).rar
- 教材订购系统(jsp+servlet+mysql)130226.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈