     double fx, fy;
     for (int i = 0; i < step; i++)
     {
-        float t = i / step;
-        float u = 1 - t;
+        float t = (float)i / (float)step;
+        float u = 1.0 - t;
         fx = x0 * u * u + x1 * 2 * u * t + x2 * t * t;
         fy = y0 * u * u + y1 * 2 * u * t + y2 * t * t;
-        lineTo(fx, fy);
-    }
-    lineTo(x2, y2);
+        lineTo(floorf(fx * 100) / 100, floorf(fy * 100) / 100);
+    }
+    lineTo(floorf(x2 * 100) / 100, floorf(y2 * 100) / 100);
 }
 
 void arc(long sx, long sy, long cx, long cy, long ex, long ey, bool ccw)

#endif
    _sys.startPosition[0] = x;
    _sys.startPosition[1] = y;
    _sys.time = _sys.defaultTime;
    addMotion(x, y, 0, _sys.speed, _sys.acceleration);
}
void lineTo(long x, long y)
{
    waitingPushPoint();
#ifdef DEBUG
    String str = "line:";
    str += x;

}
bool motionStep()
{
    if (plannedLength < 1)
    {
        return false;
    }
    firePower(_sys.points[0].power);
    long distX = _sys.points[0].delta[0];
    long distY = _sys.points[0].delta[1];
    if (distX <= 0 && distY <= 0)
