Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Regenerate with latest flexml.
[simgrid.git] / src / surf / random_mgr.c
index cec30f9..d87ce7b 100644 (file)
@@ -6,7 +6,11 @@
 
 #include "surf/random_mgr.h"
 #include "xbt/sysdep.h"
-#include "simgrid_config.h" /*_XBT_WIN32*/
+#include "gras_config.h" /*_XBT_WIN32*/
+#include <math.h>
+#include <stdlib.h>
+
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(random, surf, "Random part of surf");
 
 #ifdef _XBT_WIN32
 
@@ -52,7 +56,7 @@ union ieee754_double {
   } ieee_nan;
 };
 
-#define IEEE754_DOUBLE_BIAS    0x3ff   /* Added to exponent.  */
+#define IEEE754_DOUBLE_BIAS  0x3ff   /* Added to exponent.  */
 
 double drand48(void);
 
@@ -189,7 +193,7 @@ int _rand_r(unsigned int *pseed)
 
 #endif
 
-static double custom_random(Generator generator, long int *seed)
+static double custom_random(e_random_generator_t generator, long int *seed)
 {
   switch (generator) {
 
@@ -197,6 +201,9 @@ static double custom_random(Generator generator, long int *seed)
     return drand48();
   case RAND:
     return (double) rand_r((unsigned int *) seed) / RAND_MAX;
+  case RNGSTREAM :
+    XBT_INFO("Seen RNGSTREAM");
+    return 0.0;
   default:
     return drand48();
   }
@@ -247,7 +254,7 @@ double random_generate(random_data_t random)
   return X * (random->max - random->min) + random->min;
 }
 
-random_data_t random_new(Generator generator, long int seed,
+random_data_t random_new(e_random_generator_t generator, long int seed,
                          double min, double max, double mean, double std)
 {
   random_data_t random = xbt_new0(s_random_data_t, 1);
@@ -259,12 +266,12 @@ random_data_t random_new(Generator generator, long int seed,
 
   /* Check user stupidities */
   if (max < min)
-    THROW2(arg_error, 0, "random->max < random->min (%f < %f)", max, min);
+    THROWF(arg_error, 0, "random->max < random->min (%f < %f)", max, min);
   if (mean < min)
-    THROW2(arg_error, 0, "random->mean < random->min (%f < %f)", mean,
+    THROWF(arg_error, 0, "random->mean < random->min (%f < %f)", mean,
            min);
   if (mean > max)
-    THROW2(arg_error, 0, "random->mean > random->max (%f > %f)", mean,
+    THROWF(arg_error, 0, "random->mean > random->max (%f > %f)", mean,
            max);
 
   /* normalize the mean and standard deviation before storing */
@@ -272,7 +279,7 @@ random_data_t random_new(Generator generator, long int seed,
   random->std = std / (max - min);
 
   if (random->mean * (1 - random->mean) < random->std * random->std)
-    THROW2(arg_error, 0, "Invalid mean and standard deviation (%f and %f)",
+    THROWF(arg_error, 0, "Invalid mean and standard deviation (%f and %f)",
            random->mean, random->std);
 
   return random;