いくつかの場合について実測してみた
> y <- runif(100000000)
> # 2倍するのと足し算の差はない
> system.time(2*y)
ユーザ システム 経過
0.458 0.594 1.054
> system.time(y+y)
ユーザ システム 経過
0.435 0.551 0.979
> # 2乗と掛け算の差はない
> system.time(y^2)
ユーザ システム 経過
0.443 0.535 0.971
> system.time(y*y)
ユーザ システム 経過
0.438 0.528 0.958
> # 3乗と2回の掛け算なら,2回の掛け算の方が速い
> system.time(y^3)
ユーザ システム 経過
4.084 0.549 4.611
> system.time(y*y*y)
ユーザ システム 経過
1.228 1.245 10.646
> # 2進数で正確に表せる数ならば,割り算も掛け算も差はない
> system.time(y/4)
ユーザ システム 経過
0.448 0.533 0.972
> system.time(y*0.25)
ユーザ システム 経過
0.442 0.527 0.961
> # 2進数で正確に表せない数ならば,掛け算の方が速い
> system.time(y/10)
ユーザ システム 経過
1.024 0.516 1.529
> system.time(y*0.1)
ユーザ システム 経過
0.442 0.524 0.958
> # 1/2乗と sqrt 関数では,sqrt の方が速い
> system.time(y^0.5)
ユーザ システム 経過
1.234 0.509 1.731
> system.time(sqrt(y))
ユーザ システム 経過
0.978 0.512 1.479
> # 整数倍と実数倍では,実数倍の方が速い
> system.time(123L*y)
ユーザ システム 経過
0.560 0.516 1.068
> system.time(123*y)
ユーザ システム 経過
0.441 0.536 0.968
> # でもねえ,100000000 回の演算でこれだけしか違わないのだから,どっちでもよい
※コメント投稿者のブログIDはブログ作成者のみに通知されます