AnglePath strange behaviour

I’ve noted that AnglePath behaves differently according to the length of the argument.

It seems that when the steps are less than 100 the output can be a list of _Integer coordinates, otherwise the output is always a list of _Real coordinates and sometimes with gratuitous errors too.

Do[If[And @@ MatchQ[#, {_Integer, _Integer}] & /@ AnglePath[ConstantArray[0, i]], , Print[i]; Break[]], {i, Infinity}];  (* 100 *) 

In this example when the angles are all 0° the path is a straight line and the list of 2D coordinates is:

  • {{0,0},{1,0},{2,0},...} with less then 100 steps
  • {{0.,0.},{1.,0.},{2.,0.},...} with more then 99 steps

But something even more unreliable arises when right angles are used:

Last@AnglePath[ConstantArray[90°, 96]] (* {0,0} *)  Last@AnglePath[ConstantArray[90°, 100]] (* {-1.25677*10^-13, -1.3824*10^-13} *)  Last@AnglePath[ConstantArray[90°, 10000000]] (* {0.00189154, 0.00189872} *) 

Is this intended or known?