Small amounts of random movement and rotation in a perfectly symmetrical simulation

If I have a cube sitting flush to a large platform and move the cube solely with a force in the Z direction, the Y rotation and X position change slightly as well over the course of the movement. This only occurs when there is friction between the cube in the platform. Even with friction, shouldn’t the X position of a cube not change if it is placed on a perfectly flat symmetrical surface and only moved in the Z direction? After all, because everything is perfectly symmetrical, the direction it moves on X would have to be at some point randomly generated. Is there any way to disable this random movement without locking the position in the rigidbody? I dont want the position to change unless the cube actually collides in a way which would produce a force in the X direction or Y axis.

Physics simulations are using floats where a solver solves tiny overlaps producing impulses to keep things from interpenetrating and it doesn’t have a wider world view which is what you see as a logical view of the world with things “aligned”.

In the end the solver is there to ensure approximate physical behaviour and do it fast. Because it’s also using floating-point, small errors creep in. Damping and constraints and other mechanisms you can control such as setting thresholds for inelastic collisions as well as solver iterations can help.

Typically though, aligning things close means that you have contacts and these contacts are dealt with as contact constraints that need to be solved to stop penetration. This is where the tiny float errors creep in.

The only way to absolutely ensure no changes in position occur are to use position contraints.