“數學函數動態編譯器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屬性爲打開狀態的情況下;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章