I think I understand now. Because the uint32 range was only used up to value of 27, the float value became so small, right?:
In [23]: 27.0/(2**32)Out[23]: 6.28642737865448e-09