intからdoubleへ

昨日のTopCoder SRMでのちょっとしたこと。


確率を表すパーセント値を整数として受け取る関数での処理。確率計算をするために整数のパーセント値を100で割るわけですが、自分が書いたコードがこう。

double calc(int input){
  double p = (double)input / 100;
  ...(pを使った計算)...
}

周知の通り単にinput/100としてしまうと、intとintの演算結果はintに丸められるのでうまくいかない。だからdoubleにキャストしないといけません。


しかし、他の人のコードを見ていて、もっと良い方法があることに気づきました。


わざわざ明示的にキャストしなくても、doubleのリテラルを使えば十分です。タイプ量も少ない。

  double p = input / 100.0;


さらに言うと、こうした方がスマート?

  double p = input * 0.01;

実行時間はこちらのほうが有利そう。あとでマイクロベンチマーク取ってみる。
マイクロベンチマークの参考記事:http://www.ibm.com/developerworks/jp/java/library/j-jtp02225/