[Numpy-discussion] Slightly off-topic - accuracy of C exp function?

Matthew Brett matthew.brett at gmail.com
Wed Apr 23 14:59:23 EDT 2014


Hi,

On Wed, Apr 23, 2014 at 1:43 AM, Nathaniel Smith <njs at pobox.com> wrote:
> On Wed, Apr 23, 2014 at 6:22 AM, Matthew Brett <matthew.brett at gmail.com> wrote:
>> Hi,
>>
>> I'm exploring Mingw-w64 for numpy building, and I've found it gives a
>> slightly different answer for 'exp' than - say - gcc on OSX.
>>
>> The difference is of the order of the eps value for the output number
>> (2 * eps for a result of ~2.0).
>>
>> Is accuracy somewhere specified for C functions like exp?  Or is
>> accuracy left as an implementation detail for the C library author?
>
> C99 says (sec 5.2.4.2.2) that "The accuracy of the floating point
> operations ... and of the library functions in <math.h> and
> <complex.h> that return floating point results is implemenetation
> defined. The implementation may state that the accuracy is unknown."
> (This last sentence is basically saying that with regard to some
> higher up clauses that required all conforming implementations to
> document this stuff, saying "eh, who knows" counts as documenting it.
> Hooray for standards!)
>
> Presumably the accuracy in this case is a function of the C library
> anyway, not the compiler?

Mingw-w64 implementation is in assembly:

http://sourceforge.net/p/mingw-w64/code/HEAD/tree/trunk/mingw-w64-crt/math/exp.def.h

> Numpy has its own implementations for a
> bunch of the math functions, and it's been unclear in the past whether
> numpy or the libc implementations were better in any particular case.

I only investigated this particular value, in which case it looked as
though the OSX value was closer to the exact value (via sympy.mpmath)
- by ~1 unit-at-the-last-place.  This was causing a divergence in the
powell optimization path and therefore a single scipy test failure.  I
haven't investigated further - was wondering what investigation I
should do, more than running the numpy / scipy test suites.

Cheers,

Matthew



More information about the NumPy-Discussion mailing list