Cで書いてもええけど

> ((float)rand()) * STR_MAX / RAND_MAX );

この乱数に対する意識の低さがくそ