From 098f27771389f16bbe05b63f91f87635fbf0c259 Mon Sep 17 00:00:00 2001 From: Michael Moon Date: Sun, 24 Jan 2010 23:43:05 +1100 Subject: [PATCH] had some machine variables defined as floating point, returned all calculations to integer preserving as much precision as practical --- mendel/dda.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mendel/dda.c b/mendel/dda.c index a74f5dd..74fa32d 100644 --- a/mendel/dda.c +++ b/mendel/dda.c @@ -201,14 +201,14 @@ void dda_create(TARGET *target, DDA *dda) { // since it's unusual to combine X, Y and Z changes in a single move on reprap, check if we can use simpler approximations before trying the full 3d approximation. if (dda->z_delta == 0) - distance = approx_distance(dda->x_delta * 1000, dda->y_delta * 1000) / STEPS_PER_MM_X; + distance = approx_distance(dda->x_delta * 1000, dda->y_delta * 1000) / ((uint32_t) STEPS_PER_MM_X); else if (dda->x_delta == 0 && dda->y_delta == 0) - distance = dda->z_delta * 1000 / STEPS_PER_MM_Z; + distance = dda->z_delta * ((uint32_t) (1000 / STEPS_PER_MM_Z)); else - distance = approx_distance_3(dda->x_delta * 1000 * STEPS_PER_MM_Z / STEPS_PER_MM_X, dda->y_delta * 1000 * STEPS_PER_MM_Z / STEPS_PER_MM_Y, dda->z_delta * 1000) / STEPS_PER_MM_Z; + distance = approx_distance_3(dda->x_delta * ((uint32_t) (1000 * STEPS_PER_MM_Z / STEPS_PER_MM_X)), dda->y_delta * ((uint32_t) (1000 * STEPS_PER_MM_Z / STEPS_PER_MM_Y)), dda->z_delta * 1000) / ((uint32_t) STEPS_PER_MM_Z); if (distance < 2) - distance = dda->e_delta * 1000 / STEPS_PER_MM_E; + distance = dda->e_delta * ((uint32_t) (1000 / STEPS_PER_MM_E)); if (distance < 2) distance = dda->f_delta;