各種演算のスピードを調べてみた。どれも時計の秒針見ながら計っただけなので細かい値は適当。基準のプログラムからどれだけ時間が増えたかを計測。
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倍と圧倒的に遅い。