pylucene 3.5.0-3
[pylucene.git] / lucene-java-3.5.0 / lucene / contrib / spellchecker / src / test / org / apache / lucene / search / suggest / Average.java
1 package org.apache.lucene.search.suggest;
2
3
4 /**
5  * Licensed to the Apache Software Foundation (ASF) under one or more
6  * contributor license agreements.  See the NOTICE file distributed with
7  * this work for additional information regarding copyright ownership.
8  * The ASF licenses this file to You under the Apache License, Version 2.0
9  * (the "License"); you may not use this file except in compliance with
10  * the License.  You may obtain a copy of the License at
11  *
12  *     http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  */
20
21 import java.util.List;
22 import java.util.Locale;
23
24 /**
25  * Average with standard deviation.
26  */
27 final class Average
28 {
29     /**
30      * Average (in milliseconds).
31      */
32     public final double avg;
33
34     /**
35      * Standard deviation (in milliseconds).
36      */
37     public final double stddev;
38
39     /**
40      * 
41      */
42     Average(double avg, double stddev)
43     {
44         this.avg = avg;
45         this.stddev = stddev;
46     }
47
48     public String toString()
49     {
50         return String.format(Locale.ENGLISH, "%.0f [+- %.2f]", 
51             avg, stddev);
52     }
53
54     static Average from(List<Double> values)
55     {
56         double sum = 0;
57         double sumSquares = 0;
58
59         for (double l : values)
60         {
61             sum += l;
62             sumSquares += l * l;
63         }
64
65         double avg = sum / (double) values.size();
66         return new Average(
67             (sum / (double) values.size()), 
68             Math.sqrt(sumSquares / (double) values.size() - avg * avg));
69     }
70 }