Hi Benjamin,

On Mon, Jun 2, 2014 at 3:34 AM, Benjamin Baier <program...@netzbasis.de> wrote:
> You might want to read up on floating point arithmetic. (rounding and
> representation)
>

The error in floating point calculations is typically measured in
"ulps". The error shown in this example is far too big for the
existing calculation to be correct. I'm linking to the wikipedia
article for some background reading for you but there's a lot more
info on the web on this topic:
http://en.wikipedia.org/wiki/Unit_in_the_last_place


>
> 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
>>
>

Reply via email to