[Numpy-discussion] TypeError when using double , longdouble in numpy.dot

Charles R Harris charlesr.harris at gmail.com
Thu Jul 8 00:43:34 EDT 2010


On Wed, Jul 7, 2010 at 10:13 PM, Christoph Gohlke <cgohlke at uci.edu> wrote:

> Dear NumPy developers,
>
> I am trying to solve some scipy.sparse TypeError failures reported in
> [1] and reduced them to the following example:
>
>
> >>> import numpy
> >>> a = numpy.array([[1]])
>
> >>> numpy.dot(a.astype('single'), a.astype('longdouble'))
> array([[1.0]], dtype=float64)
>
> >>> numpy.dot(a.astype('double'), a.astype('longdouble'))
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> TypeError: array cannot be safely cast to required type
>
>
> Is this exception expected?
>
>
I think not. On some platforms longdouble is the same as double, on others
it is extended precision or quad precision. On your platform this looks like
a bug, on my platform it would be correct except there is a fallback version
of dot that works with extended precision. Is there a mix of compilers here,
or is it msvc all the way down.

In [5]: a = array([[1]])

In [6]: dot(a.astype('single'), a.astype('longdouble'))
Out[6]: array([[1.0]], dtype=float128)


Also I noticed this:
>
> >>> numpy.array([1]).astype('longdouble').dtype.num
> 13
> >>> numpy.array([1.0]).astype('longdouble').dtype.num
> 12
>
>
Yeah, that is probably correct in a strange sort of way since the two types
are identical under the hood. On ubuntu I get

In [1]: array([1]).astype('longdouble').dtype.num
Out[1]: 13

In [2]: array([1.]).astype('longdouble').dtype.num
Out[2]: 13

Type numbers aren't a good way to determine precision in a platform
independent way.



> I am using Python 2.6.5 for Windows and numpy 1.4.1 compiled with msvc9,
> where sizeof(longdouble) == sizeof(double).
>
>
>
Chuck
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20100707/cc51bd3a/attachment.html>


More information about the NumPy-Discussion mailing list