X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Ftestbed%2Ftestbed_api_sd.c;h=08f697248e797b46dfa020bb57a1e434e434178c;hb=0778d7e951b20f42af01597ae41ba8d2d26857d0;hp=f6710774daab8bab0a75ec37dbdb39ca8bc23542;hpb=a4d6140c4020e3508ea60c83d04e20208a1c6ba0;p=oweals%2Fgnunet.git diff --git a/src/testbed/testbed_api_sd.c b/src/testbed/testbed_api_sd.c index f6710774d..08f697248 100644 --- a/src/testbed/testbed_api_sd.c +++ b/src/testbed/testbed_api_sd.c @@ -1,6 +1,6 @@ /* This file is part of GNUnet - (C) 2008--2012 Christian Grothoff (and other contributing authors) + (C) 2008--2013 Christian Grothoff (and other contributing authors) GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -21,7 +21,7 @@ /** * @file testbed/testbed_api_sd.c * @brief functions to calculate standard deviation - * @author Sree Harsha Totakura + * @author Sree Harsha Totakura */ #include "platform.h" @@ -109,7 +109,7 @@ GNUNET_TESTBED_SD_init_ (unsigned int max_cnt) struct SDHandle *h; GNUNET_assert (1 < max_cnt); - h = GNUNET_malloc (sizeof (struct SDHandle)); + h = GNUNET_new (struct SDHandle); h->max_cnt = max_cnt; return h; } @@ -159,7 +159,7 @@ GNUNET_TESTBED_SD_add_data_ (struct SDHandle *h, unsigned int amount) } GNUNET_assert (h->cnt < h->max_cnt); if (NULL == entry) - entry = GNUNET_malloc (sizeof (struct SDEntry)); + entry = GNUNET_new (struct SDEntry); entry->amount = amount; GNUNET_CONTAINER_DLL_insert_tail (h->head, h->tail, entry); h->sum += amount; @@ -173,32 +173,40 @@ GNUNET_TESTBED_SD_add_data_ (struct SDHandle *h, unsigned int amount) /** - * Returns the factor by which the given amount differs from the standard deviation + * Calculates the factor by which the given amount differs * * @param h the SDhandle * @param amount the value for which the deviation is returned - - * @return the deviation from the average; GNUNET_SYSERR if the deviation cannot - * be calculated OR 0 if the deviation is less than the average; a - * maximum of 4 is returned for deviations equal to or larger than 4 + * @param factor the factor by which the given amont differs + * @return GNUNET_SYSERR if the deviation cannot + * be calculated; GNUNET_OK if the deviation is returned through factor */ int -GNUNET_TESTBED_SD_deviation_factor_ (struct SDHandle *h, unsigned int amount) +GNUNET_TESTBED_SD_deviation_factor_ (struct SDHandle *h, unsigned int amount, + int *factor) { double diff; - unsigned int n; + int f; + int n; if (h->cnt < 2) return GNUNET_SYSERR; if (((float) amount) > h->avg) + { diff = ((float) amount) - h->avg; + f = 1; + } else - return 0; //diff = h->avg - ((float) amount); + { + diff = h->avg - ((float) amount); + f = -1; + } diff *= diff; for (n = 1; n < 4; n++) if (diff < (((double) (n * n)) * h->vr)) break; - return n; + *factor = f * n; + return GNUNET_OK; } /* end of testbed_api_sd.c */