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.