“数学函数动态编译器TCompile类”的bug跟踪、新版源代码下载

   “数学函数动态编译器TCompile类”的bug跟踪、新版源代码下载
            [email protected]  2007.06.17

tag: 函数动态编译,TCompile,胜天财务进销存

  2002年的时候在网上共享了“数学函数动态编译器TCompile类”,它可以在程
序运行过程中动态完成数学函数表达式字符串的编译执行(动态生成机器码执行,
不是解释执行);从那以后代码就很少更新了;而最近来邮件询问这个库的人越来
越多起来;
  网上查询了一下,发现“TCompile类”被《...Delphi优秀
免费资源》文章收录;网上有名的开放源代码的《胜天财务进销存》收录(其中
的Compile_Calc.pas单元); ...
  很多人已经把它使用到了一些关键的计算领域,所以就有了这篇文章;

  "数学函数动态编译器TCompile类"是我在学习Delphi的过程中写的,
命名、代码风格和框架设计都不是很好,当时写它的首要需求是快速的计算;
建议现在在使用这个类的用户下载最新版本的TCompile类的源代码;
(由于源代码有7千多行,就不贴在该文章里了 见文章后面的下载链接)
(新版本默认使用Double数据类型,如果需要兼容以前的Extended类型,需要把
  //{$DEFINE FloatType_Single}
  {$DEFINE FloatType_Double}
  //{$DEFINE FloatType_Extended}
这几行改写为:
  //{$DEFINE FloatType_Single}
  //{$DEFINE FloatType_Double}
  {$DEFINE FloatType_Extended}
)
对于用于关键性计算领域的用户建议关闭TCompile的优化(属性EnabledOptimizeDiv/
EnabledOptimizeStack/EnabledOptimizeConst都设置为false)

用户如果遇到TCompile类的bug请给个回帖或发邮件给我,我会把bug和修正情况在该文章中更新;

附:
“数学函数动态编译器TCompile类”的使用Demo:
        var
          Compilation : TCompile; // 声明Compilation为数学函数动态编译器TCompile类的实例
          str         : string;
          xValue      : TCmxFloat;
        begin
            Compilation:=TCompile.Create; //创建类
          try
            str:='x+sin(y*PI/2)*3';
            Compilation.SetText(str);   //str为要求值的数学表达式字符串
            ......
            //如果有参数,可以获得参数地址,并赋值 (默认值为0)
            //如: PTCmxFloatX:=Compilation.GetParameterAddress('x');
            //如: PTCmxFloatY:=Compilation.GetParameterAddress('y');
            //    PTCmxFloatX^:=1.5;
            //    PTCmxFloatY^:=0.5;
            //也可以一次获得所有的参数列表:Compilation.GetParameterList(PList);
            ......
            xValue:=Compilation.Value; //获得表达式的值,
                                       //可以多次改变参数值并多次调用(如放在循环中),这样才能显示出效率:)
            ......
          finally
            Compilation.Free;     //释放类
          end;
        end;

最新的“数学函数动态编译器TCompile类”源代码下载:

 http://download.csdn.net/source/202002 

(TCompile类在"Compile/SDK/Delphi/Compile_Hss.pas"文件)


bug和修正列表:

2005.08.05更新

-- 已知使用最早发布的TCompile的代码Power函数(指数函数)的实现有一个优化错误,该错误发生在Power(B,N),当B是一个带参数的表达式,而N属于[0,1,2],并且EnabledOptimizeConst属性为打开状态的情况下;

 

你可能感兴趣的:(优化,框架,String,Delphi,编译器,compilation)