unC0Rr писал(а):Особенно обидно когда разница возникает при проверке условий больше-меньше, при этом работает разный код и результаты получаются ещё более разными.
Условия нужно проверять с учетом погрешности:
Проверка на ноль
- Код: Выделить всё
if abs(a) < e then ... else ...
где e - допустимая погрешность.
А аналогично для сравнения больше:
- Код: Выделить всё
if a + e > b then ...
if a - b > e then ...
if a - b > -e then...
меньше:
- Код: Выделить всё
if a - e < b then ...
if a - b < e then ...
if a - b < -e then ...
или что-то в этом духе, точные формы не припомню.
unC0Rr писал(а):Чуть-чуть, буквально пара пикселов.
Один-в-один врядли добьешься, но может удасться улучшить результат до погрешности в пол пикселя. Вопрос в том как вычисляешь, как преобразуешь действительное к целому.
Попробуй для расчетов и использовать другой масштаб (смысл в том чтобы увеличить точность в расчетах с плавающей точкой):
например (x, y) - целочисленные координаты, а (u, v) - соответствующие действительные координаты.
Преобразование u := 2 * x; v := 2 * y; обратное: x := Round(u / 2), y := Round(v / 2)
или x := Round(u) div 2; y := Round(v) div 2;
По экспериментируй с другим множителем...