Date: prev next · Thread: first prev next last
2013 Archives by date, by thread · List index


On 07/11/2013 02:02 AM, Winfried Donkers wrote:

Hi,

Presently I'm looking at bug fdo 37341, which reports calc to hang when Goal Seek (sc/source/core/tool/interpr2.cxx, ScInterpreter::ScBackSolver()) is used.

The cause of the problem is not that too many iterations are needed, but that MAXRECURSION in sc/source/core/data/formulacell.cxx, ScFormulaCell::Interpret() is reached.

Increasing MAXRECURSION 'solves' the problem.

I think increasing MAXRECURSION from its present value (400) to 800 is no problem. 10 years ago its value was 500 and in the past 1 years the available memory has been more than doubled.

The thing with recursion is that you need to be careful not to run out of stack memory too, and the amount of stack memory has little to do with the size of your physical memory, and it's very easy to run out of stack memory.[1]

Do you have any suggestions about how to properly solve this?

To me just increasing MAXRECURSION to 800 is a dirty hack.

Yup.  I wouldn't go there if I were you.

Actually, I'm just wondering why that code is even in ScInterpreter. The goalseek functionality is not a cell function, and I would expect a code like that to be outside of ScInterpreter. This is just my guess, but because we are putting a code that does its own iterative calculation on top of the recursive interpretation that ScInterpreter already does, it is somehow not resetting the recursion counter in each iteration. Maybe you can see if the recursion counter is really zero when the formula calls Interpret() in each iteration... In theory the recursion count should be zero when each iteration ends.

If you take a look at ScDocument::Solver, it actually creates a fake formula cell instance and stuff it with fake formula expression to perform this goal seek. Why not move this code from its current location (ScInterpreter::ScBackSolver) into ScDocument::Solver and eliminate this awkward indirection?

That's what I would try to do first.

Kohei

[1] http://stackoverflow.com/questions/10482974/why-is-stack-memory-size-so-limited

--
Kohei Yoshida, LibreOffice Calc hacker, SUSE.


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.