[NumPy-Tickets] [NumPy] #1633: Changeset 8438 breaks ldexp on 64bit/bigendian systems
NumPy Trac
numpy-tickets@scipy....
Mon Oct 11 13:58:34 CDT 2010
#1633: Changeset 8438 breaks ldexp on 64bit/bigendian systems
--------------------+-------------------------------------------------------
Reporter: nics | Owner: somebody
Type: defect | Status: new
Priority: normal | Milestone: 1.5.1
Component: Other | Version: 1.5.0
Keywords: |
--------------------+-------------------------------------------------------
Testsuite fails with:
======================================================================
FAIL: test_ldexp (test_umath.TestLdexp)
----------------------------------------------------------------------
Traceback (most recent call last):
File
"/pf/m/m222086/xas/solaris10/64/python2/python-2.7-ve0-gcc/lib/python2.7
/site-packages/numpy/core/tests/test_umath.py", line 391, in test_ldexp
assert_almost_equal(ncu.ldexp(2., 3), 16.)
File
"/pf/m/m222086/xas/solaris10/64/python2/python-2.7-ve0-gcc/lib/python2.7
/site-packages/numpy/testing/utils.py", line 463, in assert_almost_equal
raise AssertionError(msg)
AssertionError:
Arrays are not almost equal
ACTUAL: 2.0
DESIRED: 16.0
>> raise AssertionError('\nArrays are not almost equal\n ACTUAL: 2.0\n
DESIRED: 16.0')
The issue has been introduced here:
http://projects.scipy.org/numpy/changeset/8438
The reason is in DOUBLE_ldexp (loops.c.src:1122):
const int in2 = *(int *)ip2;
Since ip2 is being cast from (long*) to (int*), and thus in2 (exponent)
will only receive the first 4 bytes, that is the 4 most significant bytes
on bigendian, that is zero on 64bit.
System's ldexp's exp-argument is _always_ an int, and thus in my opinion,
the correct behaviour is to reject any exp-argument we cannot convert to
an system's int, that is an np.intc, and adjusting the docs and the
testsuite rather than silently giving invalid results.
The attached diff
- fixes the ldexp_signatures to match the system's ldexp again (broken by
changeset 8438)
- adjusts the testsuite to only put in system's ints
--
Ticket URL: <http://projects.scipy.org/numpy/ticket/1633>
NumPy <http://projects.scipy.org/numpy>
My example project
More information about the NumPy-Tickets
mailing list