x.min() depends on ordering

Charles R Harris charlesr.harris at gmail.com
Sat Nov 11 18:49:21 CST 2006

On 11/11/06, Charles R Harris <charlesr.harris at gmail.com> wrote:
> On 11/11/06, Tim Hochberg <tim.hochberg at ieee.org> wrote:
> >
> > Robert Kern wrote:
> <snip>
> My preference would be to raise an error / warning when there is a nan
> > in the array. Technically, there is no minimum value when a nan is
> > present. I believe that this would be feasible be swapping the compare
> > from 'a < b' to '!(a >= b)'. This should return NaN if any NaNs are
> > present and I suspect the extra '!' will have minimal performance impact
> > but it would have to be tested. Then a warning or error could be issued
> > on the way out depending on the erstate. Arguably returning NaN is more
> > correct than returning the smallest non NaN anyway.
> >
> No telling what compiler optimizations might do with  '!(a >= b)' if they
> assume that '!(a >= b)' == 'a < b'. For instance,
> if !(a >= b)
>     do something;
> else
>     do otherwise;

This made me curious. Here is the code

int test(double a, double b)
    if (a > b)
        return 0;
    return 1;

Here is the relevant part of the assembly code when compiled with no

        fnstsw  %ax
        ja      .L4
        jmp     .L2
        movl    $0, -20(%ebp)
        jmp     .L5
        movl    $1, -20(%ebp)
        movl    -20(%ebp), %eax

Which jumps to the right place on a > b (ja)

Here is the relevant part of the assembly code when compiled with -O3

        fnstsw  %ax
        popl    %ebp
        setbe   %al
        movzbl  %al, %eax

Which sets the value of the return to the logical value of a <= b (setbe),
which won't work right with NaNs. Maybe the compiler needs another flag to
deal with the possibility of NaN's because the generated code is actually
incorrect. Or maybe I just discovered a compiler bug. But boy, that compiler
is awesome clever. Those optimizers are getting better all the time.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://projects.scipy.org/pipermail/numpy-discussion/attachments/20061111/f55488d4/attachment-0001.html 
-------------- next part --------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
-------------- next part --------------
Numpy-discussion mailing list
Numpy-discussion at lists.sourceforge.net

More information about the Numpy-discussion mailing list