One thing which occurred to me today was that OpenGL specifies the GL_SHININESS material component to be between 0.0 and 128.0, instead of between 0.0 and 1.0.
As far as I know, everything else which you can specify using floating point values has a range of 0.0 to 1.0. What is the reason for the difference with GL_SHININESS?
Edits:
See also my notes in a new answer posted below.
The range 0.0 to 1.0 doesn't make any sense, because of the way in which the lighting model is constructed. The shininess coefficient is used as an exponent. Raising x^y for y in the range [0.0, 1.0] doesn't make much sense in a lighting model because for x in the range [-1.0, +1.0] (which it is because it comes out of the back of a trig cosine function) you can't more tightly constrain the trigonometric distribution, you can only less tightly constrain it.
Good references which explain this better than I have done here include:
Interactive Computer Graphics - A Top Down Approach With Shader Based OpenGL by Angel and Schreiner
The OpenGL Programming Guide, Version 4.3
The answers below are also quite informative.
I think when I asked this question some years ago I probably subsequently asked "Why isn't the value in the range 0.0 to 1.0, and this value then mapped onto a new value for the exponent?" This is another good question, presumably this would be an exponential map: y = exp(kx), x in [0.0, 1.0]. The answer is "because it isn't designed that way". While this might be more useful from a "black box" point of view, it's not very useful to a scientist who has measured the exponent in some form of experiment in the hope of implementing realistic material models.