You can store a double in the registry as a string.
e.g.
sprintf((char *)buffer, "%f", (float)dval);
error = RegWriteString (userRootKey, userSubKeyName, userValName, buffer);
and read with:
error = RegReadString (userRootKey, userSubKeyName, userValName, buffer, 256, &realSize);
if (!error) sscanf((char *)buffer, "%f", &fval);
But you may have to be careful if you are really worried about precision. I am not sure what the maximum string length can be.
Paul.