I would suggest you have a look at usleep, nanosleep, ualarm, and setitimer/getitimer. These are the high resolution timer functions found in UNIX/Linux, and have been worked over by really smart people for a very long time (at least since POSIX in the case of some of them, but probably years before that, as well). Then again, it looks like the POSIX functions have a range limitation of 0 to 999999, so maybe they're using much smaller storage than you'd use. If history is any indicator, I would guess that the Linux implementation is not subject to those limitations internally, but imposes them to match compliance with the POSIX standard (and probably provides the less limited functionality via an optional parameter or library call--just a guess, here), so a look at the Linux high resolution timer code might turn up very useful ideas.
The only high res time tool I've ever used was Time::HiRes from CPAN, so I have no low-level understanding to impart to you. I just know what the functions are called, and figured that might get you started in the right direction.
Agreed. There are good time/date libraries out there, including the functions in the Linux/GNU C runtime library. Trying to do this yourself is just asking for unnecessary pain: the library functions handle all the quirks for you, from weekday/d/m/y h/m/s.ms.µs.ns <-> internal representation conversions to time zones, leap years, leap seconds, etc.
This is a solved problem. Use the existing solutions.
And if for some reason you need absolute control and the built-in functions just can't fulfill your obscure needs, using doubles doesn't seem like a particularly appealing solution at all, as you'll still end up with precision issues on non-integers, except they're harder to control because they will vary. If there's something the built-in functions can't do for you (I doubt it!) I suggest reading up on the internal representation those functions use, and see if you can build on it.
The only high res time tool I've ever used was Time::HiRes from CPAN, so I have no low-level understanding to impart to you. I just know what the functions are called, and figured that might get you started in the right direction.