Good, I can reproduce this one.

BTW, you'll need a 64 bit machine sooner or later! I bought one for about $300 last month (recycling keyboard, mouse, display, and hard disk from an older machine).

Don Clugston wrote:
Aargh, it was an incorrect reduction. Here's an larger case which
fails with the latest DMD, Phobos, and druntime.
(Reducing test cases is a bit painful through a remote connection).
-------------
double nextUpw(double x) @trusted nothrow
{
    ulong *ps = cast(ulong *)&x;

    if ((*ps & 0x7FF0_0000_0000_0000) == 0x7FF0_0000_0000_0000) {
        if (x == -x.infinity) return  -x.max;
        return x;
    }
    if (!(*ps & 0x8000_0000_0000_0000L))  {
         assert(x>=0);
    }
    return x;
}

void main()
{
  nextUpw(-double.min_normal*(1.0 - double.epsilon));
}
=========

On 3 January 2011 23:37, Walter Bright <[email protected]> wrote:
Works when I try it. Do you have the latest dmd?

Don Clugston wrote:
Reduced test case  from std.math. *ps is 0x800F_FFFF_FFFF_FFFF, yet
the if() branch is not taken.
This one looks as though it might be the root cause of many failures.

void check(double x)
{
ulong *ps = cast(ulong *)&x;
if (*ps & 0x8000_0000_0000_0000) {}
else assert(x>=0);
}

void main()
{
 check(-double.min_normal*double.epsilon);
}


_______________________________________________
dmd-internals mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/dmd-internals

_______________________________________________
dmd-internals mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/dmd-internals


_______________________________________________
dmd-internals mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/dmd-internals

Reply via email to