Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 28 Jul 2012 10:40:41 -0500
From:      Stephen Montgomery-Smith <stephen@missouri.edu>
To:        Bruce Evans <brde@optusnet.com.au>
Cc:        freebsd-bugs@freebsd.org, FreeBSD-gnats-submit@freebsd.org, Stephen Montgomery-Smith <stephen@freebsd.org>
Subject:   Re: bin/170206: complex arcsinh, log, etc.
Message-ID:  <501407F9.3030200@missouri.edu>
In-Reply-To: <20120728171345.T1911@besplex.bde.org>
References:  <201207270247.q6R2lkeR021134@wilberforce.math.missouri.edu> <20120727233939.A7820@besplex.bde.org> <5012A96E.9090400@missouri.edu> <20120728142915.K909@besplex.bde.org> <50137C24.1060004@missouri.edu> <20120728171345.T1911@besplex.bde.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On 07/28/2012 02:35 AM, Bruce Evans wrote:
> On Sat, 28 Jul 2012, Stephen Montgomery-Smith wrote:
>
>> On 07/28/2012 12:25 AM, Bruce Evans wrote:
>>>
>>> #define    DE    DBL_EPSILON        // for clarity
>>>
>>> (1)   1 + DE/2        = 1         (half way case rounded down to even)
>>> (2)   1 + DE/2 + DE/2 = 1         (double rounding)
>>> (3)   DE/2 + DE/2 + 1 = 1 + DE    (null rounding)
>>>
>>> We want to add -1 to a value near 1 like the above.  Now a leading 1
>>> in the above will cancel with the -1, and the the order in (3) becomes
>>> the inaccurate one.
>>
>> Yes, but in my situation, I am rather sure that when I am adding
>> highest to lowest that this won't occur.  I am starting with -1, then
>> adding something close to 1, then adding lots of smaller terms.  And I
>> find it very plausible that the kind of situation you describe won't
>> happen. x0*x0 is close to 1. x0*x1 is at most sqrt(DE) times smaller.
>> And so on.  So I think the kind of situation you describe should never
>> happen.
>
> Ahem.  FP^2 space is not nearly as large as the metaverse (only 2^256
> cases even for sparc64), but it is large enough so that almost
> everything that can happen in it does happen in it.  You are right
> that problems are far away with the x* terms (x0*x0 had better not be
> very close to 1 unless it is exactly 1, since it it is too close then
> it will no longer be many times larger than x0*x1 after subtracting 1
> from it; the other cases for x* are simpler).  The problem is with the
> additional y* terms.  x and y are independent, so for many or most x,
> there are many y's with bits that cause half-way cases when combined
> with x.
> After splitting and squaring, the bits move around, so it hard to generate
> or control the offending y's.
>
>> As I said, I don't have a mathematical proof that the kind of thing
>> you describe can NEVER happen.  I just have never observed it happen.
>
> There might be a measly 2^128 bad cases out of 2^256.  Then no one would
> even observe them by chance :-).  But half-way cases are fairly common.

I agree.  That is why I am sad that I don't have a mathematical proof. 
and the probability of picking out the bad example by chance is 
something like the chances of being hit by a large asteroid, so we will 
never see it happen in a random experiment.




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?501407F9.3030200>