From: ian Date: Fri, 16 May 2008 19:03:45 +0000 (+0000) Subject: rounding errors X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ijackson/git?a=commitdiff_plain;h=813b3a8fb0b1635e82e9be280f257bfa512481b0;p=trains.git rounding errors --- diff --git a/hostside/safety.h b/hostside/safety.h index 2e88f13..7c07b4d 100644 --- a/hostside/safety.h +++ b/hostside/safety.h @@ -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*/ diff --git a/hostside/speed.c b/hostside/speed.c index 43175b6..627eff5 100644 --- a/hostside/speed.c +++ b/hostside/speed.c @@ -22,7 +22,7 @@ static void decel_done(TimeoutEvent *toev) { static const SpeedRange *stop_info(Train *tra, double speed) { int i; for (i=0; in_speedregimes; i++) - if (speed <= tra->speedregimes[i].speed) + if (speed <= tra->speedregimes[i].speed + UNMARGIN_ROUNDING) return &tra->speedregimes[i]; abort(); }