Вверх ↑
Разработчик
Ответов: 4697
Рейтинг: 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