Author: Richard Plangger <planri...@gmail.com> Branch: Changeset: r88789:8096cd4c9209 Date: 2016-12-01 13:40 +0100 http://bitbucket.org/pypy/pypy/changeset/8096cd4c9209/
Log: precision loss, big number * small number has a different result then doing the calculation in order, disable the feature diff --git a/pypy/module/micronumpy/test/test_zjit.py b/pypy/module/micronumpy/test/test_zjit.py --- a/pypy/module/micronumpy/test/test_zjit.py +++ b/pypy/module/micronumpy/test/test_zjit.py @@ -518,12 +518,10 @@ def test_prod(self): result = self.run("prod") assert int(result) == 576 - self.check_vectorized(1, 1) def test_prod_zero(self): result = self.run("prod_zero") assert int(result) == 0 - self.check_vectorized(1, 1) def define_max(): diff --git a/pypy/module/pypyjit/test_pypy_c/test_micronumpy.py b/pypy/module/pypyjit/test_pypy_c/test_micronumpy.py --- a/pypy/module/pypyjit/test_pypy_c/test_micronumpy.py +++ b/pypy/module/pypyjit/test_pypy_c/test_micronumpy.py @@ -76,7 +76,6 @@ arith_comb = [ ('sum','int', 1742, 1742, 1), ('sum','float', 2581, 2581, 1), - ('prod','float', 1, 3178, 1), ('prod','int', 1, 3178, 1), ('any','int', 1, 2239, 1), ('any','int', 0, 4912, 0), diff --git a/rpython/jit/backend/llgraph/runner.py b/rpython/jit/backend/llgraph/runner.py --- a/rpython/jit/backend/llgraph/runner.py +++ b/rpython/jit/backend/llgraph/runner.py @@ -1128,7 +1128,7 @@ value = sum(value) elif info.accum_operation == '*': def prod(acc, x): return acc * x - value = reduce(prod, value, 1) + value = reduce(prod, value, 1.0) else: raise NotImplementedError("accum operator in fail guard") values[i] = value diff --git a/rpython/jit/metainterp/optimizeopt/schedule.py b/rpython/jit/metainterp/optimizeopt/schedule.py --- a/rpython/jit/metainterp/optimizeopt/schedule.py +++ b/rpython/jit/metainterp/optimizeopt/schedule.py @@ -980,7 +980,6 @@ class AccumPack(Pack): SUPPORTED = { rop.FLOAT_ADD: '+', rop.INT_ADD: '+', - rop.FLOAT_MUL: '*', } def __init__(self, nodes, operator, position): diff --git a/rpython/jit/metainterp/optimizeopt/vector.py b/rpython/jit/metainterp/optimizeopt/vector.py --- a/rpython/jit/metainterp/optimizeopt/vector.py +++ b/rpython/jit/metainterp/optimizeopt/vector.py @@ -847,6 +847,10 @@ vecop, count) oplist.append(vecop) elif pack.reduce_init() == 1: + # PRECISION loss, because the numbers are accumulated (associative, commutative properties must hold) + # you can end up a small number and a huge number that is finally multiplied. giving an + # inprecision result, thus this is disabled now + raise NotImplementedError # multiply is only supported by floats vecop = OpHelpers.create_vec_expand(ConstFloat(1.0), bytesize, signed, count) diff --git a/rpython/jit/metainterp/test/test_vector.py b/rpython/jit/metainterp/test/test_vector.py --- a/rpython/jit/metainterp/test/test_vector.py +++ b/rpython/jit/metainterp/test/test_vector.py @@ -414,7 +414,9 @@ lambda a,b: lltype.intmask(lltype.intmask(a)+lltype.intmask(b)), lltype.Signed) small_floats = st.floats(min_value=-100, max_value=100, allow_nan=False, allow_infinity=False) test_vec_float_sum = vec_reduce(small_floats, lambda a,b: a+b, rffi.DOUBLE) - test_vec_float_prod = vec_reduce(small_floats, lambda a,b: a*b, rffi.DOUBLE) + # PRECISION loss, because the numbers are accumulated (associative, commutative properties must hold) + # you can end up a small number and a huge number that is finally multiplied losing precision + # test_vec_float_prod = vec_reduce(small_floats, lambda a,b: a*b, rffi.DOUBLE) def test_constant_expand(self): _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit