EAを作るのに欠かせないのは if ですね!!
if の複数条件についてはこのような話を聞きます。
if( 条件A && 条件B ){~} は条件Aが偽の時(false、条件があっていない時)でも条件Bを確認するのでif( 条件A ){ if ( 条件B ){~}}のほうが早いというものです。
下の場合は条件Aが真でないと条件Bを確認しません。
これも理にかなっています。
//EA if AND君
int A=3,B=6,C,t;
void OnTick()
{
t=GetMicrosecondCount();
for(int i=0;i<1000000;i++)
{
if( A == 4 && B == 6){C=1;}
}
Comment(GetMicrosecondCount()-t);
}
// EA ifif君
int A=3,B=6,C,t;
void OnTick()
{
t=GetMicrosecondCount();
for(int i=0;i<1000000;i++)
{
if( A == 4 )
{
if( B == 6 ){ C=1; }
}
}
Comment(GetMicrosecondCount()-t);
}
始めに A=3; としているのにifの中でA==4としていますので偽、false、条件はあっていません
IFAND君は&&で並列処理をしています。
ifif君は分けています。私もいつもこちらにしています。
やはりifif君のほうが早いですね。
今回は100万回ループしていますのでif一回当たり0.371ms早いことになります。
1回/一分を10年で1.3ms全ティックだと0.069秒早くなります・・・
条件Aが真で条件Bが偽の時はいかがでしょう
ifif君が負けています。0.021msわずかですが遅いですね。
IF二回の処理時間でしょうか。
両方が真の時はどうでしょうか?
予想は上と同じです。
ifif君 大差0.920ms差で負けています。
しばらく観察していても0.数ms程度の遅いですね。
両方偽の時はいかがでしょう
0.400ms ifif君が速いですね。
ソースコードは&&を使用するほうが圧倒的に見やすくなります。
真になりやすいほうを前に持っていき&&を使用するほうが速いという事ですね。
両方偽が多い時はIFIFのやり方が速いようです。
IFの複数条件100個を全ティック10年で7秒です
ソースの見やすい&&使用がいいようですね!!
0 件のコメント:
コメントを投稿