thouis / numpy-trac-migration

numpy Trac to github issues migration
2 stars 3 forks source link

Incorrect finfo from PPC longdouble (Trac #2077) #5874

Open numpy-gitbot opened 11 years ago

numpy-gitbot commented 11 years ago

Original ticket http://projects.scipy.org/numpy/ticket/2077 on 2012-03-10 by atmention:matthew-brett, assigned to unknown.

In [1]: import numpy as np

In [2]: print np.finfo(np.longdouble)
/Users/mb312/dev_trees/numpy/numpy/core/machar.py:125: RuntimeWarning: overflow encountered in add
  a = a + a
/Users/mb312/dev_trees/numpy/numpy/core/machar.py:127: RuntimeWarning: invalid value encountered in subtract
  temp1 = temp - a
/Users/mb312/dev_trees/numpy/numpy/core/machar.py:136: RuntimeWarning: invalid value encountered in subtract
  itemp = int_conv(temp-a)
/Users/mb312/dev_trees/numpy/numpy/core/machar.py:160: RuntimeWarning: overflow encountered in add
  a = a + a
/Users/mb312/dev_trees/numpy/numpy/core/machar.py:162: RuntimeWarning: invalid value encountered in subtract
  temp1 = temp - a
/Users/mb312/dev_trees/numpy/numpy/core/machar.py:169: RuntimeWarning: invalid value encountered in subtract
  if any(temp-a != zero):
Machine parameters for float128
---------------------------------------------------------------------
precision= 75   resolution= 1e-75
machep=    -4   eps=        1.3817869701e-76
negep =    -4   epsneg=     1.3817869701e-76
minexp=    -1   tiny=       -1.08420217274e-19
maxexp=     1   max=        -9.22337203471e+18
nexp  =     1   min=        -max
---------------------------------------------------------------------

In [3]: print np.finfo(np.longdouble).nmant
1

In [4]: np.__version__
Out[4]: '1.7.0.dev-aae5b0a'

I think the correct answers for nexp, nmant are 11, 106 respectively; see: https://developer.apple.com/library/mac/#documentation/Darwin/Reference/Manpages/man3/float.3.html

(np-devel)[mb312atmention:jerry ~]$ uname -a
Darwin jerry.bic.berkeley.edu 8.11.0 Darwin Kernel Version 8.11.0: Wed Oct 10 18:26:00 PDT 2007; root:xnu-792.24.17~1/RELEASE_PPC Power Macintosh powerpc
(np-devel)[mb312atmention:jerry ~]$ gcc -v
Using built-in specs.
Target: powerpc-apple-darwin8
Configured with: /var/tmp/gcc/gcc-5370~2/src/configure --disable-checking -enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.0/ --with-gxx-include-dir=/include/c++/4.0.0 --with-slibdir=/usr/lib --build=powerpc-apple-darwin8 --host=powerpc-apple-darwin8 --target=powerpc-apple-darwin8
Thread model: posix
gcc version 4.0.1 (Apple Computer, Inc. build 5370)
numpy-gitbot commented 11 years ago

atmention:mwiebe wrote on 2012-03-12

I seem to recall that the finfo code is using an algorithm that automatically detects these parameters by manipulating values of the given dtype. I guess either there's something wrong with the algorithm, or the long double on that platform is extremely non-conformant.

numpy-gitbot commented 11 years ago

atmention:charris wrote on 2012-03-12

The algorithm (which is kind of a mess) assumes an exponent/mantissa format, while the PPC long double is implemented using two doubles. I'm not even sure if eps really makes sense for it. I'd almost be inclined to hard code these values except that they may depend on compiler flags.