Galkov писал(а): Скажи мне друг любезный: в FProgam кто коды пихал - ты сам, или злой бабайка Это уже в привычку вошло, что всегда лучше один раз вставить "лишнюю" проверку, чем потом часами искать в чем собака зарылась Леонид писал(а): разница на порядок (в ДЕСЯТЬ раз). Для полноты счастья надо сравнить с IC. Круто. Видать из-за сравнения строк (поиск индекса нужной функции) выигрыш идет. IC сейчас сделаю.
------------ Дoбавленo в 14.41:
И все-таки не пойму, почему FastMathParse так в скорости проигрывает даже штатному MathParse
------------ Дoбавленo в 14.50:
А, все, понял, в чем дело, в FastMathParse нет возведения в степень, в итоге он каждый раз перед расчетом компилил выражение и выдавал ошибку. Вот это больше похоже на правду: Add(Button,2913659,168,462) { Left=155 Top=10 Caption="Test2" link(onClick,12093841:doEvent1,[]) } Add(Label,4742312,98,329) { Left=240 Top=10 Width=70 Height=17 Caption="MathParseEx:" } Add(Label,7945742,98,371) { Left=240 Top=30 Width=58 Height=17 Caption="MathParse:" } Add(Label,34978,98,413) { Left=240 Top=50 Width=78 Height=17 Caption="FastMathParse:" } Add(Label,4733123,343,959) { Left=320 Top=70 Width=10 Height=17 Caption="0" } Add(Label,2989583,91,406) { Left=240 Top=70 Width=14 Height=17 Caption="IC" } Add(Label,2361388,777,882) { Left=400 Top=70 Width=21 Height=17 Caption="Result" } Add(Label,6441935,777,462) { Left=400 Top=10 Width=21 Height=17 Caption="Result" } Add(Label,7850955,777,581) { Left=400 Top=30 Width=21 Height=17 Caption="Result" } Add(Label,13608767,777,735) { Left=400 Top=50 Width=21 Height=17 Caption="Result" } Add(MathParseEx,10679677,588,462) { DataCount=4 MathStr="%2*%1*%1 + %3*%1 + %4" link(onResult,14764415:doWork,[]) link(X1,161968:Var3,[(594,446)]) link(X2,5062901:Var3,[(601,439)]) link(X3,5695714:Var3,[(608,432)]) link(X4,5126503:Var3,[(615,425)]) AddHint(1,40,135,13,MathStr) } Add(VisualStrings,148062,434,399) { Lines=#1:2| } Add(VisualStrings,16148217,476,399) { Lines=#1:3| } Add(VisualStrings,8135429,518,399) { Lines=#1:4| } Add(VisualStrings,9697363,392,399) { Lines=#2:20| } Add(For,4276286,343,462) { End=100000 link(onEvent,10679677:doCalc,[]) link(onStop,16370378:doStop,[(387,475)(387,456)(274,456)(274,475)]) AddHint(-20,-62,51,13,End) } Add(TimeCounter,16370378,287,462) { link(onStart,4276286:doFor,[]) link(onStop,8109926:doText,[(331,475)(331,517)]) } Add(Hub,12093841,217,462) { OutCount=4 link(onEvent1,16370378:doStart,[]) link(onEvent2,10850824:doStart,[(259,475)(259,587)]) link(onEvent3,11599641:doStart,[(251,482)(251,741)]) link(onEvent4,8557430:doStart,[(242,489)(242,888)]) } Add(MathParse,2704163,588,581) { DataCount=4 MathStr="%2*%1*%1 + %3*%1 + %4" link(onResult,1133859:doWork,[]) link(X1,14668200:Var3,[(594,558)]) link(X2,16503595:Var3,[(601,551)]) link(X3,7233213:Var3,[(608,544)]) link(X4,6143149:Var3,[(615,537)]) AddHint(0,44,135,13,MathStr) } Add(GetDataEx,161968,392,441) { link(Data,9697363:Text,[]) } Add(GetDataEx,5062901,434,434) { link(Data,148062:Text,[]) } Add(GetDataEx,5695714,476,427) { link(Data,16148217:Text,[]) } Add(GetDataEx,5126503,518,420) { link(Data,8135429:Text,[]) } Add(For,12290167,343,581) { End=100000 link(onEvent,2704163:doCalc,[]) link(onStop,10850824:doStop,[(387,594)(387,575)(274,575)(274,594)]) AddHint(-6,43,51,13,End) } Add(TimeCounter,10850824,287,581) { link(onStart,12290167:doFor,[]) link(onStop,3091122:doText,[(331,594)(331,657)]) } Add(FastMathParse,5785906,588,735) { DataCount=4 MathStr="%2*%1*%1 + %3*%1 + %4" Point(onError) link(onResult,7653910:doWork2,[]) link(X1,478193:Var3,[(594,663)]) link(X2,1694588:Var3,[(601,649)]) link(X3,4358536:Var3,[(608,642)]) link(X4,16328891:Var3,[(615,635)]) link(onError,7653910:doWork3,[(655,748)]) AddHint(2,47,135,13,MathStr) } Add(GetDataEx,14668200,392,553) { link(Data,161968:Var2,[]) } Add(GetDataEx,16503595,434,546) { link(Data,5062901:Var2,[]) } Add(GetDataEx,7233213,476,539) { link(Data,5695714:Var2,[]) } Add(GetDataEx,6143149,518,532) { link(Data,5126503:Var2,[]) } Add(For,12719809,343,735) { End=100000 link(onEvent,5785906:doCalc,[]) link(onStop,11599641:doStop,[(387,748)(387,729)(274,729)(274,748)]) AddHint(-6,43,51,13,End) } Add(TimeCounter,11599641,287,735) { link(onStart,12719809:doFor,[]) link(onStop,15258225:doText,[(331,748)(331,811)]) } Add(HubEx,7653910,651,735) { link(onEvent,5213823:doWork,[]) } Add(InlineCode,6185762,588,882) { WorkPoints=#6:doWork| EventPoints=#7:onEvent| VarPoints=#2:vr| DataPoints=#4:dat1|4:dat2|4:dat3|4:dat4| Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|22: onEvent:THI_Event;|4: |19: dat1:THI_Event;|19: dat2:THI_Event;|19: dat3:THI_Event;|19: dat4:THI_Event;|4: |50: procedure doWork(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|29:procedure THiAsmClass.doWork;|25:var x1, x2, x3, x4: real;|5:begin|33: x1 := ReadReal(_Data, dat1, 0);|33: x2 := ReadReal(_Data, dat2, 0);|33: x3 := ReadReal(_Data, dat3, 0);|33: x4 := ReadReal(_Data, dat4, 0);|2: |46: _hi_OnEvent(onEvent, x2*x1*x1 + x3*x1 + x4);|4:end;|0:|4:end.| link(onEvent,8147195:doWork,[]) link(dat1,478193:Var2,[(594,851)(398,851)]) link(dat2,1694588:Var2,[(601,835)(440,835)]) link(dat3,4358536:Var2,[(608,820)(482,820)]) link(dat4,16328891:Var2,[(615,811)(524,811)]) } Add(For,14266523,343,882) { End=100000 link(onEvent,6185762:doWork,[]) link(onStop,8557430:doStop,[(387,895)(387,876)(274,876)(274,895)]) AddHint(-6,43,51,13,End) } Add(TimeCounter,8557430,287,882) { link(onStart,14266523:doFor,[]) link(onStop,4733123:doText,[(331,895)(331,965)]) } Add(GetDataEx,478193,392,658) { link(Data,14668200:Var2,[]) } Add(GetDataEx,1694588,434,644) { link(Data,16503595:Var2,[]) } Add(GetDataEx,4358536,476,637) { link(Data,7233213:Var2,[]) } Add(GetDataEx,16328891,518,630) { link(Data,6143149:Var2,[]) } Add(Check,14764415,665,462) { Check=1 link(onEvent,6441935:doText,[]) } Add(Check,1133859,665,581) { Check=1 link(onEvent,7850955:doText,[]) } Add(Check,5213823,679,735) { Check=1 link(onEvent,13608767:doText,[]) } Add(Check,8147195,672,882) { Check=1 link(onEvent,2361388:doText,[]) } Add(Label,15258225,343,805) { Left=320 Top=50 Width=10 Height=17 Caption="0" } Add(Label,3091122,343,651) { Left=320 Top=30 Width=10 Height=17 Caption="0" } Add(Label,8109926,343,511) { Left=320 Top=10 Width=10 Height=17 Caption="0" }
|