Hi Heiner,

On Fri, Sep 20, 2013 at 9:39 AM, Heiner Kirchhoffer
<[email protected]> wrote:
> Hello,
>
> some months ago I started using sympy for finding roots of polynomials.
> It works really well and it enables me to solve more and more complicated
> problems.

I am glad SymPy is useful to you.

>
> Recently, I observed a case where the function sympy.intervals(...) throws
> an "OverflowError" exception.
> It happens when executing the following commands:
>
> import sympy
>
> a = "(x**45 - 45*x**44 + 990*x**43 - 1)"
>
> b = "(x**46 - 15180*x**43 + 9366819*x**40 - 53524680*x**39 + 260932815*x**38
> - 1101716330*x**37 + 4076350421*x**36 - 13340783196*x**35 +
> 38910617655*x**34 - 101766230790*x**33 + 239877544005*x**32 -
> 511738760544*x**31 + 991493848554*x**30 - 1749695026860*x**29 +
> 2818953098830*x**28 - 4154246671960*x**27 + 5608233007146*x**26 -
> 6943526580276*x**25 + 7890371113950*x**24 - 8233430727600*x**23 +
> 7890371113950*x**22 - 6943526580276*x**21 + 5608233007146*x**20 -
> 4154246671960*x**19 + 2818953098830*x**18 - 1749695026860*x**17 +
> 991493848554*x**16 - 511738760544*x**15 + 239877544005*x**14 -
> 101766230790*x**13 + 38910617655*x**12 - 13340783196*x**11 +
> 4076350421*x**10 - 1101716330*x**9 + 260932815*x**8 - 53524680*x**7 +
> 9366819*x**6 - 1370754*x**5 + 163185*x**4 - 15180*x**3 + 1035*x**2 - 47*x +
> 1)"
>
> sympy.intervals( a + "*" + b )
>
>
>
> Of course, in this particular case, the exception could be avoided if
> sympy.intervals() is called for a and b separately.
> However, since I run a very large number of similar computations, I am not
> so much interested in how to solve this particular problem.
> Instead, I am interested in why this exception is raised at all. Is it due
> to a limitation of sympy.intervals()? Or maybe a bug? Or do I use it
> incorrectly?

Here is a full log with latest sympy master:

https://gist.github.com/certik/6640160

looks like a bug to me.

> What I observed so far is that the above code raises an "OverflowError"
> exception when function dup_root_upper_bound() tries to compute 2.0**1041,
> which obviously must fail.

Yes, that's the error in the log:

>>> 2.0**1041
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: (34, 'Numerical result out of range')

The question is why the intervals() function needs this, and one would
need to investigate how it works.
In any case, the exception that it throws should be more readable / informative.

Ondrej

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sympy.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to