• R/O
  • SSH
  • HTTPS

tailstat: コミット


コミットメタ情報

リビジョン45 (tree)
日時2011-05-24 07:47:15
作者qurihara

ログメッセージ

implemented AddedDoubleBinaryPrecise

変更サマリ

差分

--- trunk/XStatLib/XStat.cs (revision 44)
+++ trunk/XStatLib/XStat.cs (revision 45)
@@ -167,7 +167,7 @@
167167 // m += val * probDist[val];
168168 //}
169169 //mean = m;
170- AddedDouble m = new AddedDouble();
170+ AddedDouble m = new AddedDoubleBinaryPrecise();
171171 foreach (double val in probDist.Keys)
172172 {
173173 m.Add(val * probDist[val]);
@@ -181,7 +181,7 @@
181181 // m2 += val * val * probDist[val];
182182 //}
183183 //variance = m2 - mean * mean;
184- AddedDouble m2 = new AddedDouble();
184+ AddedDouble m2 = new AddedDoubleBinaryPrecise();
185185 foreach (double val in probDist.Keys)
186186 {
187187 m2.Add((val - mean) * (val - mean) * probDist[val]);
@@ -198,7 +198,7 @@
198198 //}
199199 //skewness = m3 - 3 * m * m2 + 2 * m * m * m;
200200 //skewness /= (sd * sd * sd);
201- AddedDouble m3 = new AddedDouble();
201+ AddedDouble m3 = new AddedDoubleBinaryPrecise();
202202 foreach (double val in probDist.Keys)
203203 {
204204 m3.Add((val - mean) * (val - mean) * (val - mean) * probDist[val]);
@@ -213,7 +213,7 @@
213213 //}
214214 //kurtosis = m4 - 4 * m * m3 + 6 * m2 * m * m - 3 * m * m * m * m;
215215 //kurtosis = kurtosis / (sd * sd * sd * sd) - 3d;
216- AddedDouble m4 = new AddedDouble();
216+ AddedDouble m4 = new AddedDoubleBinaryPrecise();
217217 foreach (double val in probDist.Keys)
218218 {
219219 m4.Add((val - mean) * (val - mean) * (val - mean) * (val - mean) * probDist[val]);
--- trunk/XStatLib/PreciseAdder.cs (revision 44)
+++ trunk/XStatLib/PreciseAdder.cs (revision 45)
@@ -35,7 +35,7 @@
3535 {
3636 s = initialValue;
3737 }
38- public void Add(double value)
38+ public virtual void Add(double value)
3939 {
4040 r = r + value;
4141 t = s;
@@ -43,10 +43,85 @@
4343 t = s - t;
4444 r = r - t;
4545 }
46- public double Value
46+ public virtual double Value
4747 {
4848 get { return s; }
4949 }
5050
5151 }
52+ public class AddedDoubleBinary : AddedDouble
53+ {
54+ List<double> list;
55+ public AddedDoubleBinary()
56+ {
57+ list = new List<double>();
58+ }
59+ public AddedDoubleBinary(double initialValue)
60+ : this()
61+ {
62+ list.Add(initialValue);
63+ }
64+ public override void Add(double value)
65+ {
66+ list.Add(value);
67+ }
68+ public override double Value
69+ {
70+ get {
71+ if (list.Count == 0) return 0d;
72+ while (list.Count > 1)
73+ {
74+ int end = list.Count;
75+ int half = list.Count / 2;
76+ for (int i = 0; i < half; i++)
77+ {
78+ int j = end - 1 - i;
79+ list[i] += list[j];
80+ list.RemoveAt(j);
81+ }
82+ }
83+ return list[0];
84+ }
85+ }
86+
87+ }
88+
89+ public class AddedDoubleBinaryPrecise : AddedDouble
90+ {
91+ List<AddedDouble> list;
92+ public AddedDoubleBinaryPrecise()
93+ {
94+ list = new List<AddedDouble>();
95+ }
96+ public AddedDoubleBinaryPrecise(double initialValue)
97+ : this()
98+ {
99+ list.Add(new AddedDouble(initialValue));
100+ }
101+ public override void Add(double value)
102+ {
103+ list.Add(new AddedDouble(value));
104+ }
105+ public override double Value
106+ {
107+ get
108+ {
109+ if (list.Count == 0) return 0d;
110+ while (list.Count > 1)
111+ {
112+ int end = list.Count;
113+ int half = list.Count / 2;
114+ for (int i = 0; i < half; i++)
115+ {
116+ int j = end - 1 - i;
117+ list[i].Add(list[j].Value);
118+ list.RemoveAt(j);
119+ }
120+ }
121+ return list[0].Value;
122+ }
123+ }
124+
125+ }
126+
52127 }
旧リポジトリブラウザで表示