作者: dune
日時: 2004/11/18(00:37)
極悪です。

そのうち こんなのも取り上げるのではと思って試してみました。

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?