> Date: Mon, 02 Jun 2014 09:34:20 +0200 > From: Benjamin Baier <program...@netzbasis.de> > > You might want to read up on floating point arithmetic. (rounding and > representation)
Well, the difference between 4.994404 and 5.0 is a bit large to blame rounding and binary representation. And other OpenBSD platforms (amd64, sparc64, powerpc) return the expected result. So I'd say that there is a bug in the i386-specific implementation of exp2(3). > On 06/02/14 05:13, Daniel Dickman wrote: > > I hit this problem while working with the numpy 1.8.1 regress suite > > which has some tests that are currently failing. > > > > Here is a reduced test case of the logaddexp2 python function which > > ends up calling exp2. Is this a bug in the openbsd exp2 > > implementation? > > > > ---8<--- > > #include <stdio.h> > > #include <stdlib.h> > > #include <math.h> > > > > int main(void) { > > double x; > > double y; > > > > // x = log2(5) > > x = 2.32192809489; > > // y = 2**(log2(5)) > > y = exp2(x); > > > > printf("expected: 5.0\n"); > > printf("actual: %f\n", y); > > > > ---8<--- > > > > on a linux/x86_64 machine: > > > > # gcc -lm test.c && ./a.out > > expected: 5.0 > > actual: 5.000000 > > > > on an openbsd/i386 machine: > > > > # gcc -lm test.c && ./a.out > > expected: 5.0 > > actual: 4.994404 > > > >