Math.log2 applied to powers of 2
Boris Zbarsky
bzbarsky at mit.edu
Thu Sep 18 11:50:31 PDT 2014
On 9/18/14, 2:12 PM, Kevin Reid wrote:
> for all x < 2^k, log2(x) < k
> for all x > 2^k, log2(x) > k
I'm not sure this is viable.
Consider, for example k == 960, x = 2^960 + 2^908.
The exact value of log2(x) would be
960 + log2(1 + 2^-52) = 960 + ln(1+2^-52)/ln(2)
< 960 + 1/ln(2) * 2^-52
< 960 + 2^-51
where the two inequalities follow from ln(1+x) < x for small x and ln(2)
> 0.5.
But 960 + 2^-51, represented as an IEEE double, is 960, because we only
have about 43-44 digits of mantissa precision left for the non-integral
part of this number...
In fact, the smallest representable double larger than 960 is 960 +
2^-43, as far as I can tell. So to get the property you want, we'd need
to have log2(x) equal to that for 2^960 < x < 2^960 + 2^917 at the very
least, which is quite a bunch of doubles, for many of which the exact
log2 value is definitely closer to 960 than to 960+2^-43.
> (This probably conflicts with generally desirable rounding
> properties, however.)
If by that you mean the argument above, I clearly agree. ;)
-Boris
More information about the es-discuss
mailing list