chiark / gitweb /
rounding errors
authorian <ian>
Fri, 16 May 2008 19:03:45 +0000 (19:03 +0000)
committerian <ian>
Fri, 16 May 2008 19:03:45 +0000 (19:03 +0000)
hostside/safety.h
hostside/speed.c

index 2e88f13519ac6aef96dbc5e04df94fae40f7ba15..7c07b4d1476dda79c6e33d570930c0ea3c153d2f 100644 (file)
@@ -363,5 +363,6 @@ int trackloc_set_exactinto(TrackLocation *t, TrackAdvanceContext *c,
 #define MARGIN_STOPTIME 50 /*ms*/
 #define MARGIN_AUTOPOINTTIME 500 /*ms*/
 #define MARGIN_POLARISETIME 50 /*ms*/
+#define UNMARGIN_ROUNDING 1e-4 /* mm/ms; for 1s, leads to max err of 100um */
 
 #endif /*SAFETY_H*/
index 43175b6d29ff8ef602877e9715ab3172ea455e17..627eff555d23435bb3fc9b082e00c46efbd299b0 100644 (file)
@@ -22,7 +22,7 @@ static void decel_done(TimeoutEvent *toev) {
 static const SpeedRange *stop_info(Train *tra, double speed) {
   int i;
   for (i=0; i<tra->n_speedregimes; i++)
-    if (speed <= tra->speedregimes[i].speed)
+    if (speed <= tra->speedregimes[i].speed + UNMARGIN_ROUNDING)
       return &tra->speedregimes[i];
   abort();
 }