-#include <assert.h>
#include "../q.h"
#include "active.h"
{
segment_t*s = a->list;
assert(!s || !s->left);
- double lastx;
+ segment_t*l = 0;
while(s) {
if(y) {
- double x = ((double)s->delta.x*(y-s->a.y)/s->delta.y)+s->a.x;
- if(s!=a->list) {
- assert(lastx<=x);
+ if(l) {
+ /* we need to re-evaluate the x of the previous segment. if we
+ try to store it, it might end up being converted to a double,
+ which will make it non-equal to (and possibly larger than) the
+ "long double" the FPU has in it's register. This only happens
+ when compiler optimizations are turned on. */
+ assert((XPOS(s, y) - XPOS(l, y)) >= 0);
+ assert(XDIFF(s,l,y) >= 0);
}
- lastx = x;
+ l = s;
}
assert(!s->left || s->left->right == s);
assert(!s->right || s->right->left == s);