This is what glide_size does when you try to set it to a decimal value. It is rare for glide_size to actually come out to be an integer if you're using this formula designed to achieve perfectly smooth, constant-speed tile movement:
// move_delay is the time (in 1/10 seconds) between movements.
// Dir is the direction of movement; the pixel distance traveled
// is different for cardinal vs diagonal movements.
if(move_delay)
var distance = ((Dir & (Dir - 1) ? sqrt(2) : 1) * 32
glide_size = distance * world.tick_lag / move_delay
else glide_size = 0
This is moving at the same speed as above, but using animate() for gliding instead of glide_size. It's much smoother (no stutter) and capable of any movement speed at any framerate.
The glide_size variable is obsolete. It's limited to integers only, meaning objects can only move at pixels at a time. "But it's not possible to move less than a pixel! How would you even display that!?"
This is what moving less than a pixel per frame looks like. All the gifs here are at 60 frames per second (though LICEcap was probably recording them at more like ~30 FPS, which is a much more feasible framerate for a BYOND game anyway). Moving at less than a pixel per frame simply translates to not moving every frame, as a positive side-effect of preserving decimal accuracy, or, in the case of animate(), calculating the variables with respect to time.
http://www.byond.com/developer/FIREking/SmoothTileMovement