One thing you might try (though this may also fail due to floating point errors)
is multiplying your number by a few hundred before taking the log.
Then subtracting from the result to account for the initial magnification.
log(a*b) = log a + log b
log10 1000 = 3
log10 6 = 0.77815125
log10 6000 = 3.77815125
...
UPDATE:
Although this makes me think we ought to have a Math::SmallRat and SmallFloat.
PDL or
Math::FixedPrecision might also work.
UPDATE:
Apparently Math::BigFloat is just a bit of a slight misnomer.
It's not just for BIG numbers. The Big imples a large number of bits
assigned to store the number.
--
I'm not belgian but I play one on TV.