Вверх ↑
Разработчик
Ответов: 4698
Рейтинг: 426
#1: 2014-06-09 14:50:00 ЛС | профиль | цитата
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"
}
карма: 10
0