Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix problem when comparing two doubles.
authordonassbr <donassbr@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 29 Sep 2009 12:42:00 +0000 (12:42 +0000)
committerdonassbr <donassbr@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 29 Sep 2009 12:42:00 +0000 (12:42 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@6683 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/include/surf/maxmin.h
src/surf/cpu_im.c

index c8580a0..bf6f577 100644 (file)
@@ -8,6 +8,7 @@
 #ifndef _SURF_MAXMIN_H
 #define _SURF_MAXMIN_H
 
+#include <math.h>
 #include "portable.h"
 #include "xbt/misc.h"
 #include "surf/datatypes.h"
@@ -25,6 +26,11 @@ static XBT_INLINE int double_positive(double value)
   return (value > MAXMIN_PRECISION);
 }
 
+static XBT_INLINE int double_equals(double value1, double value2)
+{
+  return (fabs(value1 - value2) < MAXMIN_PRECISION);
+}
+
 XBT_PUBLIC(lmm_system_t) lmm_system_new(void);
 XBT_PUBLIC(void) lmm_system_free(lmm_system_t sys);
      void lmm_variable_disable(lmm_system_t sys, lmm_variable_t var);
index 0a65e33..2b3b5be 100644 (file)
@@ -272,7 +272,7 @@ static void update_actions_state(double now, double delta)
   surf_action_cpu_Cas01_im_t action;
 
   while ((xbt_heap_size(action_heap) > 0)
-         && (xbt_heap_maxkey(action_heap) <= now)) {
+         && (double_equals(xbt_heap_maxkey(action_heap), now))) {
     action = xbt_heap_pop(action_heap);
     DEBUG1("Action %p: finish", action);
     GENERIC_ACTION(action).finish = surf_get_clock();