私だけではなく、min + (max - min)/2
を計算する、この中央値機能を使用するための理由かもしれないと思いまして:なぜこのように中央値を計算するのだろうか?
// used by the random number generator
private static final double M_E12 = 162754.79141900392083592475;
/**
* Return an estimate of median of n values distributed in [min,max)
* @param min the minimum value
* @param max the maximum value
* @param n
* @return an estimate of median of n values distributed in [min,max)
**/
private static double median(double min, double max, int n)
{
// get random value in [0.0, 1.0)
double t = (new Random()).nextDouble();
double retval;
if (t > 0.5) {
retval = java.lang.Math.log(1.0-(2.0*(M_E12-1)*(t-0.5)/M_E12))/12.0;
} else {
retval = -java.lang.Math.log(1.0-(2.0*(M_E12-1)*t/M_E12))/12.0;
}
// We now have something distributed on (-1.0,1.0)
retval = (retval+1.0) * (max-min)/2.0;
retval = retval + min;
return retval;
}
私のアプローチの唯一の欠点は、多分私が言うと思い、その決定論的な性質のでしょうか?
コード全体は、http://www.koders.com/java/fid42BB059926626852A0D146D54F7D66D7D2D5A28D.aspx?s=cdef%3atree#L8、btwで見つけることができます。
おかげ
'(max - min)/ 2'これは中央値ではありません。 – CodesInChaos
@CodeInChaos:thx、それを修正しました。 –