Rで実験

各種演算のスピードを調べてみた。どれも時計の秒針見ながら計っただけなので細かい値は適当。基準のプログラムからどれだけ時間が増えたかを計測。

i<-0;while(i<4000000){x<-3.14;i<-i+1}     #基準        8.1秒
i<-0;while(i<4000000){x<--3.14;i<-i+1}    #負の数     +1.9秒
i<-0;while(i<4000000){x<-2.7+3.14;i<-i+1} #足し算     +2.3秒
i<-0;while(i<4000000){x<-2.7-3.14;i<-i+1} #引き算     +2.3秒
i<-0;while(i<4000000){x<-2.7*3.14;i<-i+1} #かけ算     +2.3秒
i<-0;while(i<4000000){x<-2.7/3.14;i<-i+1} #割り算     +2.3秒
i<-0;while(i<4000000){x<-2.7+-3.14;i<-i+1}#負の足し算 +3.4秒
i<-0;while(i<4000000){x<--2.7*3.14;i<-i+1}#負のかけ算 +3.4秒
i<-0;while(i<4000000){x<-exp(3.14);i<-i+1}#exp        +3.9秒
i<-0;while(i<4000000){x<-log(3.14);i<-i+1}#log        +7.1秒

どうやら他の言語は知らないけどRだと-3.14は「3.14の正負を反転したもの」という扱いで、そのぶん正の数より若干時間がかかるらしい。Rだと1+-2を1+(-2)と解釈してもらえたり-xを-1*xと解釈してくれるわけですがその代償はスピードだった模様。ただし-xの計算は0-xよりは速い。
四則演算については予想通りどれも同じ。負の数を扱うと遅くなるのも一緒。
expは意外に早かった。四則演算の倍もかからない。そしてlogが四則演算の3倍と圧倒的に遅い。