I think the reason you use 1075 digits is because it takes 1075 decimal digits 
behind the decimal point to exactly represent 2^-1075,
and that is 1/2 ulp.  When you discard the tail, if it happens to be all 
zeroes, I hope you replace it with a zero, not a one, because otherwise you can 
round incorrectly if the answer is otherwise equal to EVEN + 1/2 ULP.  EVEN + 
1/2 ULP rounds to EVEN, EVEN + 1/2 ULP + "1" rounds to EVEN + 1.

Whoops, no, you don't do that.  But I'd call that another bug, and not one 
worth getting terribly excited about.  Strictly speaking, if your input is 
decimal_rep_of_half_ulp + a billion zeroes + "1", then the answer is 1 ulp 
(2^-1074), if the trailing one is missing, then the answer is zero (which is 
even in the mantissa).

David

On 2013-09-12, at 10:37 AM, David Chase <david.r.ch...@oracle.com> wrote:
> On 2013-09-12, at 8:18 AM, Dmitry Nadezhin <dmitry.nadez...@gmail.com> wrote:
> 
>> The reason while binary and decimal digits are mixed can be ullustrated by
>> such example.
>> It is necessary 3 decimal fraction digits to represent exactly pbinary
>> power pow(2,-3) :
>> pow(2,-3)=1/8=0.125
>> 
>> 
>> On Thu, Sep 12, 2013 at 3:57 PM, David Chase <david.r.ch...@oracle.com>wrote:
>> 
>>> This explanation seems to combine numbers of binary digits (1075)
>>> and numbers of decimal digits (17), and therefore makes me a little
>>> nervous, though I think 1100 is a conservative choice that, even if not
>>> 100% correct, will be 99.(over 700 9s)% correct.
>>> 
>>> David
> 
> Yes, but you are adding them.  It is as if you took two lengths, 1075 feet 
> and 17 yards, added them, rounded up, and said that 1100 yards will be 
> adequate (which is entirely true, though perhaps overconservative).  
> Overconservative is okay.
> 
> 2^-1075 is the binary ulp, give or take a fencepost, not the decimal ulp.
> 
> David
> 

Reply via email to