Assaf Gordon <assafgordon <at> gmail.com> writes:
>
> Hello,
>
> On OpenBSD-5.7/amd64 (under qemu/kvm), I'm getting incorrect results
> when using ceill(3). For values between 0 and 1, the returned value
> is 0, while I'd expected it to be 1. Using ceil(3) does return 1 as
> expected. Is this my incorrect usage or a bug?
> any advice/comment will be appreciated.
>
It's a bug in the libm library. The 80-bit extended precision format has an
explicit leading bit for the integer part of a significand. Thus the line
else if((i0|i1)!=0) { se=0x3fff;i0=0;i1=0;}
in /src/lib/libm/src/ld80/s_ceill.c should read
else if((i0|i1)!=0) { se=0x3fff;i0=0x80000000;i1=0;}
or simpler still
else if((i0|i1)!=0) { return 1.0L; }
Best regards,
Nick Permyakov