ミリ秒単位の長いレイテンシの配列が与えられているので、それらからパーセンタイルを計算したいと思います。私は仕事をする方法の下にあるが、私はこれが私に正確な結果を与えるかどうかをどのように確認できるか分からない。長い配列からパーセンタイルを計算しますか?
public static long[] percentiles(long[] latencies, double... percentiles) {
Arrays.sort(latencies, 0, latencies.length);
long[] values = new long[percentiles.length];
for (int i = 0; i < percentiles.length; i++) {
int index = (int) (percentiles[i] * latencies.length);
values[i] = latencies[index];
}
return values;
}
私はlatencies
配列から第50、第95、第99および99.9thパーセンタイルを取得したいと思います。
long[] percs = percentiles(latencies, 0.5, 0.95, 0.99, 0.999);
この方法は、長い待ち時間のためにパーセンタイルを得る正しい方法ですか?私はJava 7で作業しています。
だけでなく、あなたの 'percentiles'方法は、パーセンタイル値(必ずしも正しく計算しないことに注意してください - 私の答えを参照)とリターンを値に加えて、 'latencies'配列がソートされたままになります。これは、望ましくないかもしれない副作用です。これはおそらくあなたが書こうとしている小さなプログラムでは無害ですが、一般的にメソッドの目的ではない副作用がメソッドにあるとは好ましくありません。 – ajb