極悪です。
そのうち こんなのも取り上げるのではと思って試してみました。
hoge1.cpp
---------
#include <limits.h>
int main(void)
{
for(int i = 0; i < INT_MAX; i++){
if(0 <= i){
;;;
}
}
}
hoge2.cpp
---------
#include <limits.h>
int main(void)
{
for(int i = 0; i < INT_MAX; i++){
if(0 < i || i == 0){
;;;
}
}
}
hoge3.cpp
---------
#include <limits.h>
int main(void)
{
for(int i = 0; i < INT_MAX; i++){
if(i == 0 || 0 < i){
;;;
}
}
}
hoge1 と比べて hoge2 は一見条件が複雑(というか冗長)です
が、最初の 0 < i がほとんどのケースでひっかかるので速度差
は出ないのではないか。hoge3 は最初の i == 0 がほとんどの
ケースでムダになるにも関わらず実行されるのでガクンと遅く
なるのでは、と思います。が、試してみると(bcc32 使用。最適
化等のオプション一切なし)
D:% timer hoge1 & timer hoge1 & timer hoge1
3.087000 sec3.207000 sec3.187000 sec
D:% timer hoge2 & timer hoge2 & timer hoge2
5.150000 sec5.183000 sec5.070000 sec
D:% timer hoge3 & timer hoge3 & timer hoge3
6.185000 sec6.205000 sec6.232000 sec
D:%
hoge3 と hoge2 はあまり速度差がなく、かつ hoge1 と比べる
とガクンと遅くなっています。不思議だ。
--
極悪, FZH01112 at nifty.com
http://hpcgi1.nifty.com/dune/gwiki.pl?