diff --git a/pystencils/backends/cbackend.py b/pystencils/backends/cbackend.py index a17ee7269bbb01aef673dc22c6432698d0c3cd5b..8437bdb6801ecc5adc717dec2983e5d6eda0baf0 100644 --- a/pystencils/backends/cbackend.py +++ b/pystencils/backends/cbackend.py @@ -441,7 +441,7 @@ class CustomSympyPrinter(CCodePrinter): def _print_Pow(self, expr): """Don't use std::pow function, for small integer exponents, write as multiplication""" if not expr.free_symbols: - return self._typed_number(expr.evalf(), get_type_of_expression(expr.base)) + return self._typed_number(expr.evalf(17), get_type_of_expression(expr.base)) if expr.exp.is_integer and expr.exp.is_number and 0 < expr.exp < 8: return f"({self._print(sp.Mul(*[expr.base] * expr.exp, evaluate=False))})" @@ -452,7 +452,7 @@ class CustomSympyPrinter(CCodePrinter): def _print_Rational(self, expr): """Evaluate all rationals i.e. print 0.25 instead of 1.0/4.0""" - res = str(expr.evalf().num) + res = str(expr.evalf(17)) return res def _print_Equality(self, expr): diff --git a/pystencils/simp/simplifications.py b/pystencils/simp/simplifications.py index 114b86a4013cccc3a74b641b0aabf747dbd3035d..720abb52ad0f66e030fa7b5f922b8ab0771124bd 100644 --- a/pystencils/simp/simplifications.py +++ b/pystencils/simp/simplifications.py @@ -234,7 +234,7 @@ def apply_sympy_optimisations(assignments): # Evaluates all constant terms evaluate_constant_terms = ReplaceOptim(lambda e: hasattr(e, 'is_constant') and e.is_constant and not e.is_integer, - lambda p: p.evalf()) + lambda p: p.evalf(17)) sympy_optimisations = [evaluate_constant_terms] + list(optims_c99) diff --git a/pystencils_tests/test_types.py b/pystencils_tests/test_types.py index 8fc260f42fad8f7d08afe93c6973d512930c138b..b6a7cd81cf8b7618ab69f6e0dd69094f93de3238 100644 --- a/pystencils_tests/test_types.py +++ b/pystencils_tests/test_types.py @@ -101,8 +101,9 @@ def test_sqrt_of_integer(): kernel(f=arr_single) code = ps.get_code_str(kernel.ast) - - assert "1.7320508075688772f" in code + # ps.show_code(kernel.ast) + # 1.7320508075688772935 --> it is actually correct to round to ...773. This was wrong before !282 + assert "1.7320508075688773f" in code assert 1.7 < arr_single[0] < 1.8