[pypy-commit] pypy propogate-nans: porpogate various nan values across float conversions
mattip
noreply at buildbot.pypy.org
Mon Nov 2 22:37:13 EST 2015
Author: mattip <matti.picus at gmail.com>
Branch: propogate-nans
Changeset: r80508:ebaf0b23194a
Date: 2015-11-03 04:42 +0200
http://bitbucket.org/pypy/pypy/changeset/ebaf0b23194a/
Log: porpogate various nan values across float conversions
diff --git a/pypy/module/micronumpy/test/test_ndarray.py b/pypy/module/micronumpy/test/test_ndarray.py
--- a/pypy/module/micronumpy/test/test_ndarray.py
+++ b/pypy/module/micronumpy/test/test_ndarray.py
@@ -1852,6 +1852,19 @@
a = array([(1, 2)], dtype=[('a', 'int64'), ('b', 'int64')])
assert a.view('S16')[0] == '\x01' + '\x00' * 7 + '\x02'
+ def test_half_conversions(self):
+ from numpy import array, arange
+ all_f16 = arange(0xff10, 0xff20, dtype='uint16')
+ all_f16.dtype = 'float16'
+ print all_f16.view(dtype='uint16')
+ all_f32 = array(all_f16, dtype='float32')
+ print all_f32.view(dtype='uint32')
+ b = array(all_f32, dtype='float16')
+ print b.view(dtype='uint16')
+ c = b.view(dtype='uint16')
+ d = all_f16.view(dtype='uint16')
+ assert (c == d).all()
+
def test_ndarray_view_empty(self):
from numpy import array, dtype
x = array([], dtype=[('a', 'int8'), ('b', 'int8')])
diff --git a/rpython/rlib/rstruct/ieee.py b/rpython/rlib/rstruct/ieee.py
--- a/rpython/rlib/rstruct/ieee.py
+++ b/rpython/rlib/rstruct/ieee.py
@@ -6,6 +6,7 @@
from rpython.rlib import rarithmetic, rfloat, objectmodel, jit
from rpython.rlib.rarithmetic import r_ulonglong
+from rpython.rtyper.lltypesystem.rffi import DOUBLE, cast
def round_to_nearest(x):
"""Python 3 style round: round a float x to the nearest int, but
@@ -60,7 +61,10 @@
if exp == MAX_EXP - MIN_EXP + 2:
# nan or infinity
- result = rfloat.NAN if mant else rfloat.INFINITY
+ if mant == 0:
+ result = rfloat.INFINITY
+ else:
+ result = rfloat.NAN #cast(DOUBLE, mant |
elif exp == 0:
# subnormal or zero
result = math.ldexp(mant, MIN_EXP - MANT_DIG)
More information about the pypy-commit
mailing list