Author: robert
Date: 2008-01-03 16:11:15 +0000 (Thu, 03 Jan 2008)
New Revision: 16855

Modified:
   
trunk/freenet/src/freenet/support/math/BootstrappingDecayingRunningAverage.java
   trunk/freenet/src/freenet/support/math/DecayingKeyspaceAverage.java
Log:
store normalized values for DecayingKeyspaceAverager


Modified: 
trunk/freenet/src/freenet/support/math/BootstrappingDecayingRunningAverage.java
===================================================================
--- 
trunk/freenet/src/freenet/support/math/BootstrappingDecayingRunningAverage.java 
    2008-01-03 14:25:46 UTC (rev 16854)
+++ 
trunk/freenet/src/freenet/support/math/BootstrappingDecayingRunningAverage.java 
    2008-01-03 16:11:15 UTC (rev 16855)
@@ -66,6 +66,17 @@
     public synchronized double currentValue() {
         return currentValue;
     }
+                       
+       /**
+        * Not a public method. Changes the internally stored currentValue, 
returning the old one.
+        * Used from DecayingKeyspaceAverager to normalize the stored averages. 
Calling this function
+        * may (purposefully) destroy the utility of the average being kept.
+        */
+       synchronized double setCurrentValue(double d) {
+               double old=currentValue;
+               currentValue=d;
+               return old;
+       }

     public synchronized void report(double d) {
         if(d < min) {

Modified: trunk/freenet/src/freenet/support/math/DecayingKeyspaceAverage.java
===================================================================
--- trunk/freenet/src/freenet/support/math/DecayingKeyspaceAverage.java 
2008-01-03 14:25:46 UTC (rev 16854)
+++ trunk/freenet/src/freenet/support/math/DecayingKeyspaceAverage.java 
2008-01-03 16:11:15 UTC (rev 16855)
@@ -15,15 +15,12 @@
  */
 public class DecayingKeyspaceAverage implements RunningAverage {
        /**
-        'avg' is the non-normalized average location.
+        'avg' is the normalized average location, note that the the reporting 
bounds are (-2.0, 2.0) however.
         */
        BootstrappingDecayingRunningAverage avg;

-       //If the keyspace averager wraps more than this number of times, an 
exception will be thrown.
-       public final static int WRAP_WARNING=1000;
-       
        public DecayingKeyspaceAverage(double defaultValue, int maxReports, 
SimpleFieldSet fs) {
-               avg=new BootstrappingDecayingRunningAverage(defaultValue, 
-WRAP_WARNING, WRAP_WARNING, maxReports, fs);
+               avg=new BootstrappingDecayingRunningAverage(defaultValue, -2.0, 
2.0, maxReports, fs);
        }

        public DecayingKeyspaceAverage(BootstrappingDecayingRunningAverage a) {
@@ -36,7 +33,7 @@
        }

        public synchronized double currentValue() {
-               return Location.normalize(avg.currentValue());
+               return avg.currentValue();
        }

        public synchronized void report(double d) {
@@ -57,10 +54,10 @@
                 diff = +0.3;    //the diff from the normalized values; 
Location.change(0.9, 0.2);
                 avg.report(2.2);//to successfully move the average towards the 
closest route to the given value.
                 */
-               //System.err.println("debug: "+superValue+", "+thisValue+", 
"+diff+", "+(superValue+diff)+", "+Location.normalize(superValue+diff));
-               if (toAverage>WRAP_WARNING || toAverage<-WRAP_WARNING)
-                       Logger.error(this, "DecayingKeyspaceAverage is wrapped 
up too many times");
                avg.report(toAverage);
+               double newValue=avg.currentValue();
+               if (newValue < 0.0 || newValue > 1.0)
+                       avg.setCurrentValue(Location.normalize(newValue));
        }

     public synchronized double valueIfReported(double d) {


Reply via email to