>From the numpy test suite, I think I might have found a bug in
nextafterl(3). The "result_ld" variable below comes back as nan on
i386. But doing the same calculations with floats returns the expected
values.

A test on Linux also shows the expected results for both the float and
long double cases.

---[ on linux/x86_64 ]-------------------

# gcc -lm test2.c && ./a.out
1.000000e+00
-5.421011e-20
OK
1.000000
-0.000000
OK

---[ on openbsd/i386 ]-------------------

# gcc -lm test2.c && ./a.out
1.000000e+00
nan                   <-------------- this looks wrong
1.000000
-0.000000
OK

---[ test2.c ]-------------------

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void) {
        long double one_ld;
        long double zero_ld;
        long double after_ld;
        long double result_ld;

        one_ld = 1.0L;
        zero_ld = 0.0L;

        after_ld = nextafterl(one_ld, zero_ld);
        printf("%Le\n", after_ld);
        result_ld = after_ld - one_ld;
        // result_ld should not be nan
        printf("%Le\n", result_ld);
        if (result_ld < 0)
                printf("OK\n");

        float one_f;
        float zero_f;
        float after_f;
        float result_f;

        one_f = 1.0;
        zero_f = 0.0;

        after_f = nextafterf(one_f, zero_f);
        printf("%f\n", after_f);
        result_f = after_f - one_f;
        printf("%f\n", result_f);
        if (result_f < 0)
                printf("OK\n");
}

Reply via email to