Ok, that's actually a lot simpler.
You can keep a table which holds the rgb values of all hues (at full saturation and default brightness).
From there you can go darker, brighter and desaturate (blend to grey).
Actually you don't really need a table as the hue palette is just a linear interpolation between six values:
0 ... 60 ... 120 ... 180 ... 240 ... 300 ... 360/0
(1,0,0), (1,1,0), (0,1,0), (0,1,1), (0,0,1), (1,0,1), (1,0,0)
Since it's 2015 I would generally consider using more than 8bit per color channel.
I doubt that float has any advantage over integer, though.